mongodb - 我怎样才能在 mongodb 中做到这一点?那可能吗?
问题描述
假设我的收藏有 3 个文档:
{
"_id" : ObjectId("5b759065bfd90aa9cc925349"),
"path" : "aa/bb",
"data" : {
"a" : "b"
}
}
{
"_id" : ObjectId("5b7590cabfd90aa9cc9253aa"),
"path" : "cc/dd",
"data" : {
"c" : "d",
"path_list":[{"path_ref" : "aa/bb"}]
}
}
{
"_id" : ObjectId("5b7590cabfd90aa9cc9253aa"),
"path" : "ee/ff",
"data" : {
"e" : "f",
"path_list":[{"path_ref" : "aa/cc"}]
}
}
如果 data.path_ref 存在,我需要将字符串替换为对象(如果字符串是有效路径)。如果没有,什么也不做。所以我想得到:
{
"_id" : ObjectId("5b759065bfd90aa9cc925349"),
"path" : "aa/bb",
"data" : {
"a" : "b"
}
}
{
"_id" : ObjectId("5b7590cabfd90aa9cc9253aa"),
"path" : "cc/dd",
"data" : {
"c" : "d",
"path_list" : [ {"path_ref" : {
"_id" : ObjectId("5b759065bfd90aa9cc925349"),
"path" : "aa/bb",
"data" : {
"a" : "b"
}
} }]
}
}
{
"_id" : ObjectId("5b7590cabfd90aa9cc9253aa"),
"path" : "ee/ff",
"data" : {
"e" : "f",
"path_list":[{"path_ref" : "aa/cc"}]
}
}
我是 mongodb 的新手。我确实对聚合有所了解。请让我知道这是否可能?
======= 符合stackoverflow 我发布了很多代码并且没有足够的描述。但我想我已经清楚地描述了我的问题。这些只是占位符。请忽略它。
解决方案
您可以在 3.6 中使用以下聚合。
db.col.aggregate([
{"$unwind":{"path":"$data.path_list","preserveNullAndEmptyArrays":true}},
{"$lookup":{
"from":"col",
"localField":"data.path_list.path_ref",
"foreignField":"path",
"as":"path_ref_lookup"
}},
{"$unwind":{"path":"$path_ref_lookup","preserveNullAndEmptyArrays":true}},
{"$group":{
"_id":"$_id",
"path":{"$first":"$path"},
"data":{"$first":"$data"},
"path_refs":{
"$push":{
"$cond":[
{"$gt":["$path_ref_lookup",0]},
{"path_ref":"$path_ref_lookup"},
"$data.path_list"
]
}
}
}},
{"$addFields":{
"data.path_list":{
"$cond":[{"$eq":["$path_refs",[]]},"$$REMOVE","$path_refs"]
}
}},
{"$project":{"path_refs":0}}
])
推荐阅读
- ruby-on-rails-5 - Rails searchkick 无法根据 where 查询获得结果
- c# - 用于创建用户的参数化查询引发缺少用户或角色名称异常
- wso2esb - WSO2 esb 验证中介失败
- javascript - 通过单击动态生成的链接打开leanmodal弹出窗口
- android - Android ClassNotFoundException android.support.v4.util.ArrayMap
- django - 如何检索当前 Django 用户并将其输入数据库条目
- javascript - 在 Firebase 博客中的 Vanilla Javascript 中将孩子的 ID 设置为父母唯一 ID 的父母
- reactjs - 为什么 Redux reducer 在点击操作后返回 undefined?
- c# - Asp.NET Core 集成测试:POST 方法获取空值
- amazon-web-services - 无法列出 AWS SQS 指标