【发布时间】:2019-05-25 14:11:33
【问题描述】:
我正在尝试通过从另一个集合合并来进行查询,但是查询运行时遇到障碍,生成的数据不是我想象的那样
我有这样的数据
{
"_id": "5ce8981a46039c14a4ec32d1",
"name": "Monkey D Luffy",
"email": "aaa@aaa.com",
"status": "not verified",
"password": "$2a$10$ayluBIsOOelBTIk.69GjHubgQemr6dJfgBUELNusCOaUGLpS/qKs6",
"metas": {
"role": "admin",
"smartphone": "ios",
"address": "konoha",
"hobby": "eat ramen"
}
},
我想从嵌套文档中提取元数据:
{
"_id": "5ce8981a46039c14a4ec32d1",
"name": "Monkey D Luffy",
"email": "aaa@aaa.com",
"status": "not verified",
"password": "$2a$10$ayluBIsOOelBTIk.69GjHubgQemr6dJfgBUELNusCOaUGLpS/qKs6",
"role": "admin",
"smartphone": "ios",
"address": "konoha",
"hobby": "eat ramen"
},
如果我的问题有任何重复,请建议我,因为我没有找到相同的问题,主要是使用数组。
这是我的查询:
db.accounts.aggregate([
{
$lookup: {
from: "account_meta",
localField: "_id",
foreignField: "account_id",
as: "metas"
}
},
{ "$unwind": "$metas" },
{
$group: {
_id: "$_id",
name: {$first:"$name"},
status: {$first: "$status"},
email: {$first: "$email"},
password: {$first: "$password"},
data: {
"$push": {
"k" : "$metas.key",
"v": "$metas.value"
}
}
}
},
{
$project: {
"_id": "$_id",
"name": "$name",
"email": "$email",
"status": "$status",
"password": "$password",
"metas" :{
$arrayToObject: "$data"
}
}
},
{
"$replaceRoot": {
"newRoot":
{
"$mergeObjects": [ {$arrayToObject: "$data"}, "$$ROOT"]
},
}
},
])
【问题讨论】:
-
解决了 xD 我只是更改了 "$mergeObjects": [ '$metas', "$$ROOT"] 并在 $replaceRoot 之后添加了 $project : {metas: 0}
-
请将答案发布为答案,而不是 cmets。另外,不要编辑问题标题;只需将答案标记为“已接受”即可。
-
将答案标记为已接受?怎么办?
-
嗯,首先你需要实际发布一个答案。再次,请停止编辑您的问题;只需发布一个单独的答案。
-
接受答案见meta.stackexchange.com/questions/5234/…。您可能需要等待两天才能接受自己的答案。