在嵌套对象的数组字段中按 id 查找子文档
find subdocument by id inside a array field of nested object
如果我有这样的文档:
{
"_id": ObjectId("54e6774a73a7edfefdb9e2bc"),
"information":"",
"__v":0,
"goalieRoster":{
"locked":[
],
"approved":[
{
"_id": ObjectId("548d49bad972605bf2d1f55a"), // find by this
}
],
"signedUp":[
{
"_id": ObjectId("548d49bad972605bf2d1f55a"),
}
],
"maxSize":2
},
"skaterRoster":{
"locked":[
],
"approved":[
],
"signedUp":[
],
"maxSize":26
},
"date":{
"updated":"2015-02-20T02:56:42.258Z",
"skate":""
}
}
如何通过子文档的 id 获取 approved
中的整个子文档?
我想我很接近,因为以下查询几乎可以满足我的要求。
db.roster.find(
{
"goalieRoster.approved._id": ObjectId("548d54e9576ddacc20f3a88e")
},
{
"goalieRoster.approved": 1
}
);
它 returns 父文档和 approved
数组中的匹配子文档嵌套在 goalieRoster
中,就像这样
{
"_id" : ObjectId("54e6774a73a7edfefdb9e2bc"),
"goalieRoster" : {
"approved" : [
{
"_id" : ObjectId("548d54e9576ddacc20f3a88e"),
}
]
}
}
问题是我想要的只是approved
里面的子文档。另外,是否可以将 goalieRoster
删除到 approved
并让它在 goalieRoster
和 skaterRoster
中的已批准数组中查看?
编辑:我要找的结果是这个
{
"_id" : ObjectId("548d54e9576ddacc20f3a88e"),
}
你想要的是使用 $
运算符的投影。
db.test.find({"goalieRoster.approved._id": ObjectId("548d49bad972605bf2d1f55a")},
{"goalieRoster.approved.$": true}
)
结果
{
"_id" : "54e6774a73a7edfefdb9e2bc",
"goalieRoster" : { "approved" : [ { "_id" : "548d54e9576ddacc20f3a88e" } ] }
}
如果我有这样的文档:
{
"_id": ObjectId("54e6774a73a7edfefdb9e2bc"),
"information":"",
"__v":0,
"goalieRoster":{
"locked":[
],
"approved":[
{
"_id": ObjectId("548d49bad972605bf2d1f55a"), // find by this
}
],
"signedUp":[
{
"_id": ObjectId("548d49bad972605bf2d1f55a"),
}
],
"maxSize":2
},
"skaterRoster":{
"locked":[
],
"approved":[
],
"signedUp":[
],
"maxSize":26
},
"date":{
"updated":"2015-02-20T02:56:42.258Z",
"skate":""
}
}
如何通过子文档的 id 获取 approved
中的整个子文档?
我想我很接近,因为以下查询几乎可以满足我的要求。
db.roster.find(
{
"goalieRoster.approved._id": ObjectId("548d54e9576ddacc20f3a88e")
},
{
"goalieRoster.approved": 1
}
);
它 returns 父文档和 approved
数组中的匹配子文档嵌套在 goalieRoster
中,就像这样
{
"_id" : ObjectId("54e6774a73a7edfefdb9e2bc"),
"goalieRoster" : {
"approved" : [
{
"_id" : ObjectId("548d54e9576ddacc20f3a88e"),
}
]
}
}
问题是我想要的只是approved
里面的子文档。另外,是否可以将 goalieRoster
删除到 approved
并让它在 goalieRoster
和 skaterRoster
中的已批准数组中查看?
编辑:我要找的结果是这个
{
"_id" : ObjectId("548d54e9576ddacc20f3a88e"),
}
你想要的是使用 $
运算符的投影。
db.test.find({"goalieRoster.approved._id": ObjectId("548d49bad972605bf2d1f55a")},
{"goalieRoster.approved.$": true}
)
结果
{
"_id" : "54e6774a73a7edfefdb9e2bc",
"goalieRoster" : { "approved" : [ { "_id" : "548d54e9576ddacc20f3a88e" } ] }
}