使用聚合和 $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") }
}
])
我有以下 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") }
}
])