子集的查询集合

时间:2013-05-09 19:07:11

标签: mongodb mongodb-query

尝试查询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"
    }

1 个答案:

答案 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/]} }

希望有所帮助