使用聚合和 $lookup 在超过 1 个字段上使用 $match

Use $match on more than 1 field with aggregate and $lookup

我有以下 mongo 查询。

db.ServiceProvider.aggregate([
   {
      $unwind: "$PostCommentUserIDs"
   },
   {
      $lookup:
         {
            from: "Parents",
            localField: "PostCommentUserIDs",
            foreignField: "ID",
            as: "ParentDetailsArr"
        }
   },
   {
      $match: { "ParentDetailsArr": { $ne: [] } }
   }
])

结果如下:

{
    "_id" : ObjectId("57245af1588aec5b118b4567"),
    "ServiceProviderID" : 3,
    "Title" : "test",
    "PostedMessage" : "test",
    "TotalComments" : 0,
    "TotalShares" : 0,
    "TotalThanks" : 0,
    "AddedOn" : "2016-04-30",
    "LastModifiedOn" : "2016-04-30 07:12:49",
    "PostAttachment" : {
        "ImagePath" : ""
    },
    "PostCommentUserIDs" : "3",
    "PostComments" : [
        {
            "ID" : "1462000372388480634",
            "UserID" : 3,
            "CommentMessage" : "1",
            "TotalThanks" : 0,
            "AddedOn" : "2016-04-30 07:12:52",
            "LastModifiedOn" : "2016-04-30 07:12:52",
            "CommentAttachment" : {
                "ImagePath" : ""
            }
        },
    ],
    "Subscriber" : [ ],
    "ParentDetailsArr" : [
        {
            "_id" : ObjectId("572447e6588aec32108b4569"),
            "ID" : "3",
            "UID" : "0Xb1fHqzR3HZVJWQc8aAbB77UkwSnmasdQrtp9qySVdqipsYs6eC7rEt",
            "Name" : "Chinmay Kulkarni",
            "ProfileImagePath" : "images3_3_1460348144#SIZE#.jpeg"
        }
    ]
}
{
    "_id" : ObjectId("57246137588aec41118b4567"),
    "ServiceProviderID" : 3,
    "Title" : "test",
    "PostedMessage" : "test",
    "TotalComments" : 0,
    "TotalShares" : 0,
    "TotalThanks" : 0,
    "AddedOn" : "2016-04-30",
    "LastModifiedOn" : "2016-04-30 07:39:35",
    "PostAttachment" : {
        "ImagePath" : ""
    },
    "PostCommentUserIDs" : "3",
    "PostComments" : [
        {
            "ID" : "14620019791507102321",
            "UserID" : 3,
            "CommentMessage" : "1",
            "TotalThanks" : 0,
            "AddedOn" : "2016-04-30 07:39:39",
            "LastModifiedOn" : "2016-04-30 07:39:39",
            "CommentAttachment" : {
                "ImagePath" : ""
            }
        },
    ],
    "Subscriber" : [ ],
    "ParentDetailsArr" : [
        {
            "_id" : ObjectId("572447e6588aec32108b4569"),
            "ID" : "3",
            "UID" : "0Xb1fHqzR3HZVJWQc8aAbB77UkwSnmasdQrtp9qySVdqipsYs6eC7rEt",
            "Name" : "Chinmay Kulkarni",
            "ProfileImagePath" : "images3_3_1460348144#SIZE#.jpeg"
        }
    ]
}

我想修改上面的查询并在其中添加_id 条件。这样它只给我 1 个匹配给定 _id 的结果。

但无法破解。请帮忙!

$match取过滤条件。在 $match 聚合函数中添加 _id 查询过滤条件 - https://docs.mongodb.org/manual/reference/operator/aggregation/match/

运行 在聚合查询的最后一个管道中具有低于 $match 条件的查询。

db.ServiceProvider.aggregate([
   {
      $unwind: "$PostCommentUserIDs"
   },
   {
      $lookup:
         {
            from: "Parents",
            localField: "PostCommentUserIDs",
            foreignField: "ID",
            as: "ParentDetailsArr"
        }
   },
   {
      $match: { "ParentDetailsArr": { $ne: [] }, "_id" : ObjectId("XXXX") }
   }
])