Mongodb查询选择执行

时间:2015-01-20 18:04:33

标签: mongodb mongoose

我正试图得到这个结果:

{
     facebookId: [
     "123123", "321321", "999999"
     ]
}

但我得到了这个结果:

            {
                \"mobileUser\": {
                    \"facebookId\": \"1547339005533880\"
                }
            },
            {
                \"mobileUser\": {
                    \"facebookId\": \"958277234198503\"
                }
            },
            {
                \"mobileUser\": {
                    \"facebookId\": \"10201611922458772\"
                }
            }

我的模特:

var roomModelSchema = mongoose.Schema({
        roomId: { type: String, index: true },
            mobileUser: {
                socketId: String,
                facebookId: { type: String, index: true },
                        email: String,
                name: String,
                photoUrl: String,
                genderType: String,
                birthday: Date,
                city: String,
                likeCount: Number,
                insertDate: Date
            },
            insertDate: Date
    })

我的查询是:

Room.find({ "roomId": req.query.roomId }).select("mobileUser.facebookId -_id").exec(function(err, users) {
});

我正在努力了解mongodb查询的工作原理。因为如果我用sql构建这个查询就很容易了。我很难理解它。

1 个答案:

答案 0 :(得分:3)

如果您根据SQL RDBMS考虑MongoDb,每个mongodb文档都对应于SQL DB中的行。

因此,例如,如果您在SQL中执行

select * from myTable

你会得到

facebookID    | name  | city
--------------------------------
13453         |  A    | A
2213          |  B    | B
312321        |  C    | C

如果你在mongo中进行simialr查询

db.myTable.find({})

你会得到

{facebookId: 13454, name: A, city: A},
{facebookId: 2213, name: B, city: B},
{facebookId: 312321, name: C, city: c},

现在,如果您查询一个字段并在SQL中执行

select facebookId from myTable

你会得到

facebookID 
----------
13453     
2213      
312321    

在mongoDb中,如果执行

db.myTable.find({}, {id:false, faceBookId: true}) 

{id:false,faceBookId:true} - 对应于Mongoose的select方法。它指定文档中应包含哪些字段

你会得到

{facebookId: 13454},
{facebookId: 2213},
{facebookId: 312321},

如果您想从多个文档中获取这些字段并输出包含所有值的facebookId字段的单个文档,则可以使用聚合框架

db.myTable.aggregate(
     {$group:{_id:null, facebookId:{$addToSet:'$Name'}}}
)

这将返回:

{
     _id: null,
     facebookId: [
     "13454", "2213", "312321"
     ]
}