本文介绍了具有多个字段的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语句
发布评论