您可能需要使用aggregate
功能为$unwind
用于查找匹配卡的卡数组_id
.
所以,在猫鼬中而不是find
use aggregate
管道
样本文档
> db.cards.findOne()
{
"_id" : ObjectId("5a52f4136fe82b42b7439a21"),
"beName" : "Name1",
"beLink" : "Link1",
"cards" : [
{
"cardType" : "type1",
"cardBundle" : 1,
"_id" : "5a52f3a66f112b42b7439a20"
},
{
"cardType" : "type2",
"cardBundle" : 1,
"_id" : "5a52f3a66f112b42b7439a21"
}
]
}
聚合函数
> db.cards.aggregate([{$unwind: "$cards"}, {$match:{"cards._id" : "5a52f3a66f112b42b7439a20"}}] )
结果文件
> db.cards.aggregate([{$unwind: "$cards"}, {$match:{"cards._id" : "5a52f3a66f112b42b7439a20"}}] ).pretty()
{
"_id" : ObjectId("5a52f4136fe82b42b7439a21"),
"beName" : "Name1",
"beLink" : "Link1",
"cards" : {
"cardType" : "type1",
"cardBundle" : 1,
"_id" : "5a52f3a66f112b42b7439a20"
}
}
>
如果您了解父级,您可以进一步优化它_id
,在聚合管道中$match
由家长_id
, then $unwind
, then $match
在阵列卡上_id
> db.cards.aggregate([{$match:{"_id":ObjectId("5a52f4136fe82b42b7439a21")}},{$unwind: "$cards"}, {$match:{"cards._id" : "5a52f3a66f112b42b7439a20"}}] )