具有多个字段的MongoDB LIKE语句 [英] MongoDB like statement with multiple fields
本文介绍了具有多个字段的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屋!
查看全文