0

尝试在 mongo 集合中查询属于我的对象(查询)子集的文档。例如

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"
    }
4

1 回答 1

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

如果您在查询中不使用索引属性,那么大型集合的性能也会很差。您的问题的一种解决方案是使用数组和多键索引。

IE

{ tags : [ "color=blue","owner=mike" ] }

这样,您可以使用正则表达式\^color=\返回所有带有 class= 标签的文档并使用索引。你也可以为蓝调做 \^color=blue\。

然后要执行多个条件,您将使用$allor$in运算符。

例如

{ tags : { $in: [/^color=blue/, /^owner=mike/]} }

希望有帮助

于 2013-05-09T20:31:17.957 回答