我需要有关 MongoDB 中以下操作的帮助,我想做的就是仅将评论中的标记获取到它自己的值数组中。
我到目前为止得到的代码:
db.lodging.aggregate([
{$project:{
reviews:"$host.reviews",host:"$host"
}
},
{$unwind: "$reviews"},
])
JSON 示例:
"host" : {
"name" : "Grimes",
"surname" : "Terrell",
"gender" : "male",
"age" : NumberInt(55),
"picture" : "https://api.adorable.io/avatars/285/GrimesTerrell.png",
"reviews" : [
{
"reviewer" : "Mae Ryan",
"date" : "2015-06-01T02:41:46 -02:00",
"helpful" : NumberInt(8),
"kind" : NumberInt(1),
"responsive" : NumberInt(5)
},
{
"reviewer" : "Nixon Johnson",
"date" : "2016-02-08T10:35:12 -01:00",
"helpful" : NumberInt(1),
"kind" : NumberInt(1),
"responsive" : NumberInt(9)
},
]
}
这就是我想要实现的目标:
{
"host" : {
"name" : "Grimes",
"surname" : "Terrell",
"gender" : "male",
"age" : NumberInt(55),
"picture" : "https://api.adorable.io/avatars/285/GrimesTerrell.png",
"reviews" : [
{
"marks" : [8,1,5],
},
{
"marks" : [1,1,9],
},
]
}
假设您的标记字段名称始终为
helpful
、kind
、responsive
,您可以使用 $map。
db.collection.aggregate([
{
$project: {
host: {
name: 1,
surname: 1,
gender: 1,
age: 1,
picture: 1,
reviews: {
$map: {
input: "$host.reviews",
as: "review",
in: {
"$concatArrays": [
[
"$$review.helpful"
],
[
"$$review.kind"
],
[
"$$review.responsive"
]
]
}
}
}
}
}
}
])
这里有一个mongo游乐场供大家参考