Mongodb 查询 select 执行

Mongodb query select performing

我试图得到这个结果:

{
     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 中构建此查询,那将非常容易。我很难理解它。

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

例如,如果您在 SQL

中执行
select * from myTable

你会得到

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

并且如果您在 mongo

中执行类似查询
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'}}}
)

这将 return:

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