如何在MongoDB中查询包含字符串数组中给定字符串的元素(使用Mongoose)

时间:2015-12-13 23:28:15

标签: arrays mongodb mongoose

这是我的用户架构

var UserSchema   = new Schema({
    name:String,
    groups: [String]
});

我希望 x 中所有用户的名称数组。

例如数据集:

[
    {
        "name":"a",
        "groups":[
            "1",
            "2"
        ]
    },
    {
        "name":"b",
        "groups":[
            "3x",
            "4"
        ]
    },
    {
        "name":"c",
        "groups":[
            "1",
            "4"
        ]
    },
    {
        "name":"d",
        "groups":[
            "2",
            "3"
        ]
    },
    {
        "name":"e",
        "groups":[
        ]
    }
]

我需要结果:

for group 1:
["a","c"]

for group 2:
["a","d"]

for group 3:
["b","d"]

for group 4:
["c"]

for group 5:
[]

是否可以像这样编写查询?怎么做?

1 个答案:

答案 0 :(得分:0)

安静简单,只需要两个阶段的聚合操作。

    {li> $unwind位于groups字段。 {li> $group位于groups字段

代码:

db.t.aggregate([
{$unwind:"$groups"},
{$group:{"_id":"$groups","names":{$addToSet:"$name"}}}
])

示例结果:

{ "_id" : "3x", "names" : [ "b" ] }
{ "_id" : "4", "names" : [ "c", "b" ] }
{ "_id" : "2", "names" : [ "d", "a" ] }
{ "_id" : "3", "names" : [ "d" ] }
{ "_id" : "1", "names" : [ "c", "a" ] }