我有类似的文件:
{
"_id" : ObjectId("5ed79a6750869a5738e679c2"),
"SerialNumber" : "867688034502264",
"sharing":[
{ from:"abc", to: "123"},
{ from:"123", to: "435"}]
},
{
"_id" : ObjectId("5ed79a6750869a5738e679c3"),
"SerialNumber" : "867688034502111"
}
我想获取所有文档,并且在共享字段中,我只想获取“ from”具有特定值(例如“ abc”)的子文档
我想得到:
{
"_id" : ObjectId("5ed79a6750869a5738e679c2"),
"SerialNumber" : "867688034502264",
"sharing":[
{ from:"abc", to: "123"}]
},
{
"_id" : ObjectId("5ed79a6750869a5738e679c2"),
"SerialNumber" : "867688034502111",
}
答案 0 :(得分:0)
您可以在Aggregation Pipeline
阶段使用$filter
:
db.collection.aggregate([
{
$project: {
SerialNumber: "$SerialNumber",
sharing: {
$filter: {
input: "$sharing",
cond: {
"$eq": [
"$$this.from",
"abc"
]
}
}
}
}
}
])
https://mongoplayground.net/p/n41uUeDdv9Q
请注意,如果缺少属性,它将把sharing
设置为null
。如果存在问题,则可以在过滤之前进一步过滤文档,也可以在另一个阶段进行另一个$project
。
答案 1 :(得分:0)
您在投影中将find与$elemMatch一起使用:
db.collection.find({}, {SerialNumber:1, sharing: {$elemMatch: {from: "abc"}}})