具有多个字段的MongoDB LIKE语句 [英] MongoDB like statement with multiple fields

查看:21
本文介绍了具有多个字段的MongoDB LIKE语句的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

使用SQL,我们可以执行以下操作:

select * from x where concat(x.y ," ",x.z) like "%find m%"

When X.Y="Find"和X.Z="Me"。

当我使用类似如下的JSON结构时,我如何使用MongoDB做同样的事情:

{
  data:
  [
     {
         id:1,
         value : "find"
     },
      {
         id:2,
         value : "me"
     }
  ]
}

推荐答案

这里与SQL的比较是无效的,因为没有关系数据库具有与MongoDB相同的嵌入式数组概念,并且在您的示例中提供了这一概念。您只能在表的"行中的字段"之间"连接"。基本上不是一回事。

您可以使用$where的JavaScript求值来实现这一点,这并不是最优的,但这是一个开始。你也可以谨慎地给比赛增加一些额外的"聪明":

db.collection.find({
    "$or": [
        { "data.value": /^f/ },
        { "data.value": /^m/ }
    ],
    "$where": function() {
        var items = [];
        this.data.forEach(function(item) {
            items.push(item.value);
        });
        var myString = items.join(" ");

        if ( myString.match(/find m/) != null )
            return 1;
    }
})

这就对了。我们通过在每个单词中提取"测试字符串"中的第一个字符,并将标记与文档中数组的每个元素进行比较,对此进行了一些优化。

下一部分将数组元素"连接"成一个字符串,然后对连接的结果执行"regex"比较(与"like"相同),以查看是否匹配。如果匹配,则该文档被视为匹配并返回。

不是最优的,但这些是MongoDB在这样的结构上可用的选项。或许这种结构应该有所不同。但您没有具体说明为什么要这样做,因此我们无法为您提供更好的解决方案来实现您的目标。

这篇关于具有多个字段的MongoDB LIKE语句的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆