你可以用新的
$addFields
将用户添加到帖子的阶段。
在纯monngodb查询中,它将如下所示:
db.message.aggregate([
{
"$match": {
"servicesToPublish.status": "published",
"user.$id": {
"$in": [ObjectId("5a733013ce8300b566d15a9b"),...]
}
}
},
{
"$addFields" : { servicesToPublish: { $map: {
input: "$servicesToPublish",
as: "service",
in: { $mergeObjects: [ "$$service", { user: "$user" } ] }
} } }
},
{
"$group": {
"_id": "$hash",
"posts": {"$push": "$servicesToPublish"},
"user": {"$push": "$user"}
}
}
]);
它应该给你这样的东西:
{
"_id" : "19a5a9315ba8ac5ffb3779e68b887c805c61d54c",
"posts" : [
[
{
"serviceTokenId" : "5a7abe9cce8300c502f38d6c",
"type" : "text",
"status" : "published",
"statusUpdatedAt" : ISODate("2018-04-17T08:20:02.000Z"),
"user" : {
"$ref" : "User",
"$id" : ObjectId("5a733013ce8300b566d15aa4"),
"$db" : "master"
}
},
{
"serviceTokenId" : "59c14d0ece83008449843d15",
"type" : "other",
"status" : "published",
"statusUpdatedAt" : ISODate("2018-04-17T08:20:04.000Z")
"user" : {
"$ref" : "User",
"$id" : ObjectId("5a733013ce8300b566d15aa4"),
"$db" : "master"
}
}
],
[
{
"serviceTokenId" : "59c13700ce83005a66843d15",
"type" : "text",
"status" : "published",
"statusUpdatedAt" : ISODate("2018-04-17T06:21:57.000Z")
"user" : {
"$ref" : "User",
"$id" : ObjectId("5a7abc2ece83003b6af38d6c"),
"$db" : "master"
}
},
{
"serviceTokenId" : "59c13725ce83005668843d15",
"type" : "other",
"status" : "published",
"statusUpdatedAt" : ISODate("2018-04-17T06:21:59.000Z")
"user" : {
"$ref" : "User",
"$id" : ObjectId("5a7abc2ece83003b6af38d6c"),
"$db" : "master"
}
}
]
],
"user" : [
{
"$ref" : "User",
"$id" : ObjectId("5a733013ce8300b566d15aa4"),
"$db" : "master"
},
{
"$ref" : "User",
"$id" : ObjectId("5a7abc2ece83003b6af38d6c"),
"$db" : "master"
}
]
}
$
在字段名中。像这样使用它的尝试
{ $mergeObjects: [ "$$services", { userId: "$user.$id" } ] }
results with error 16410“字段路径字段名不能以“$”开头。”