我正试图得到这个结果:
{
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构建这个查询就很容易了。我很难理解它。
答案 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"
]
}