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"
]
}
我试图得到这个结果:
{
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"
]
}