【发布时间】:2018-04-06 03:12:30
【问题描述】:
我试图只获取特定嵌入文档的一个字段。
嵌入的文档应该基于两个条件和 然后只返回该嵌入文档的一个字段。
db.usertest.insertMany(
[{
"username" : "userA",
"objects" : [
{
"type" : "fruit",
"origin" : "ABC",
"name" : "banana",
},
{
"type" : "fruit",
"origin" : "XYZ",
"name" : "pineapple",
},
{
"type" : "vegetable",
"origin" : "XYZ",
"name" : "carrot"
}
]
},
{
"username" : "userB",
"objects" : []
}
]
)
我想查找“用户名”字段和“名称”字段 嵌入文档。
首先我想到了 $elemMatch,但我被困在了 $project 部分并且 它只返回所有嵌入文档的字段“名称” $elemMatch 是真的。
db.usertest.aggregate(
[{$match:{"objects": {"$elemMatch":{
"type": "fruit",
"origin": "XYZ"}}}},
{$project: {
"username":1,
"objects.name":1
}}]
).pretty()
然后我想到了使用 $filter,但它显然只是返回 整个嵌入文档,而不仅仅是“名称”字段。
db.usertest.aggregate(
[{$project: {
"username":1,
"name":{
$filter: {
input: "$objects",
cond: { $and: [
{ $eq: [ "$$this.type", "fruit" ] },
{ $eq: [ "$$this.origin", "XYZ" ] }
]}
}}
}}]
).pretty()
有什么想法吗?
【问题讨论】:
标签: mongodb aggregation-framework