MongoDB - 在列表中查找项目并返回不同的文档

时间:2015-03-27 21:06:54

标签: mongodb

假设我在MongoDB中有一组文档。是否存在查询字符串是否在值列表中的查询,如果存在,则仅根据特定键的值返回不同的文档?

{
    "_id" : ObjectId("5504d11b6946aa2b4dff7e99"),
    "states" : [ 
        "AL", 
        "AZ", 
        "TX"
    ],
    "name" : "Foo",
    "rating" : "NR",
    "url" : "www.domain.com",
};

   {
        "_id" : ObjectId("5504d11b6946aa2b4dff7e98"),
        "states" : [ 
            "AL", 
            "NJ", 
            "NY"
        ],
        "name" : "Bar",
        "rating" : "NR",
        "url" : "www.domain.com",
    };

  {
        "_id" : ObjectId("5504d11b6946aa2b4dff7e97"),
        "states" : [ 
            "AL", 
            "AZ", 
            "TX"
        ],
        "name" : "The Grinch",
        "rating" : "NR",
        "url" : "www.domain.net",
    }

例如, 如果AL位于states中,则仅返回网址不同的集合 - 将返回上述示例中的第一个和最后一个集合。

db.collections.find({"states":{'$in':["AL"]}})

是我用来查找列表中的状态。

db.collections.aggregate({ $group: { _id: '$url', n: { $max: '$states' } } })

结果就是我用来获取基于域的不同集合。

我遇到麻烦的是将两者合并在一个声明中。

1 个答案:

答案 0 :(得分:0)

看起来像这样:

db.collection.aggregate([
    {$match: {$states: 'AL'}},
    {$group:{_id: '$url'}}
]);

$max$in是您通话中的不必要开支。