尝试查询mongo集合以查找作为我的对象(查询)子集的文档。 e.g。
object:
{
"animal": "cat"
,"owner": "mike"
,"color": "blue"
,"city": "houston"
}
collection:
[
[0]{
"color": "red"
,"animal": "cat"
}
[1]{
"color": "blue"
}
[2]{
"owner": "mike"
,"city": "houston"
}
]
result:
[1]{
"color": "blue"
}
[2]{
"owner": "mike"
,"city": "houston"
}
答案 0 :(得分:0)
您需要根据JavaScript对象的属性动态构建查询。
查询类似于:
$and : [
{$or : [{ color: { $exists: true, $eq: 'blue' } }, {color: { $exists:false} }]},
{$or : [{ owner: { $exists: true, $eq: 'mike' } }, {owner: { $exists:false} }]},
...
// iterate through the other properties.
]
修改强>
使用$and
表示集合中的文档具有必须与object
匹配的属性 - 您可以更改为$or
以匹配任何属性。
编辑2
如果您不在查询中使用索引属性,还值得考虑大型集合的性能差。您的问题的一个解决方案是使用数组和多键索引。
即
{ tags : [ "color=blue","owner=mike" ] }
这样您可以使用正则表达式\^color=\
返回所有带有class = tag的文档并使用索引。你也可以为布鲁斯做\ ^ color = blue \。
然后,要执行多个条件,您可以使用$all
或$in
运算符。
E.g。
{ tags : { $in: [/^color=blue/, /^owner=mike/]} }
希望有所帮助