MongoDB无法匹配聚合返回的$ match对象字段

问题描述 投票:0回答:1

我无法通过另一个集合中聚合的对象字段过滤查找结果。

我具有以下聚合函数:

db.Persons.aggregate([
{ $lookup:
  {
    from: "Addresses",
    localField: "addressId",
    foreignField: "_id",
    as: "address"
  }
},

{ $unwind: "$address" }
])

返回类似:

{ 
  "_id" : "5dfa9", 
  "addressId" : ObjectId("5df95bd35a65a59142faa6be"), 
  "text" : "abc",
  "address" : 
  { 
    "_id" : ObjectId("5df95bd35a65a59142faa6be"), 
    "townId" : "3" 
  } 
}

当我添加$match时:

db.Persons.aggregate([
  { $match: { address: { $elemMatch: { "townId": "3" } } } },
  { $lookup: { ... } },
  { $unwind: "$address" }
])

我什么也没得到。但是,添加像这样的匹配{ $match: { text: "abc" } }效果很好。

mongodb aggregation-framework match lookup
1个回答
0
投票

我认为问题是$elemMatch: { "townId": "3" } }正在返回整个文档,而不仅仅是返回地址。您无法将地址字段匹配到整个文档,这可能是您不返回任何结果的原因。

var searchAddress = db.collection.find({ <array field name>: { $elemMatch: { "townId": "3" } } } ).<address field name>

然后传递searchAddress输入

$match: { address: searchAddress } 
© www.soinside.com 2019 - 2024. All rights reserved.