我的“accounts”集合中有这些文档
{
"name" : "Customer-1",
"lines" : [
{
"type" : "BroadBand",
"id" : "<MAC-ADDRESS-1>",
"status" : "ON"
},
{
"type" : "handset",
"id" : "<MSISDN-1>",
"status" : "ON"
},
{
"type" : "handset",
"id" : "34666468709",
"status" : "OFF"
},
{
"type" : "BroadBand",
"id" : "<MAC-ADDRESS-2>",
"status" : "OFF"
}
]
}我尝试了查询:
db.accounts.find({$and: [ {"name":"Customer-1"}]},{"_id":0,"lines":{$elemMatch: {"type":"BroadBand"}}}).pretty()但它只给了我第一个入口,而不是全部。因此,我希望我的输出仅为具有各自元素的boradband类型,如下所示:
"type" : "BroadBand",
"id" : "<MAC-ADDRESS-1>",
"status" : "ON"
"type" : "BroadBand",
"id" : "<MAC-ADDRESS-2>",
"status" : "OFF"发布于 2020-12-15 17:20:16
您可以使用db.collection.aggregate()方法来实现此目的。下面是查询:
db.collection.aggregate([{
"$match": {
"name": "Customer-1"
}},{
"$unwind": {
"path": "$lines"
}},{
"$match": {
"lines.type": "BroadBand"
}}, {
"$group": {
"_id": "$name",
"lines": {
"$push": "$lines"
}
}},{
"$project": {
"name": "$_id",
"lines": 1
}}])https://stackoverflow.com/questions/65302598
复制相似问题