MongoDB 分别展开 2 个嵌入式数组

阿米特·瓦尔斯

我有一个关于 MongoDB 聚合查询的问题,它几乎类似于mongodb query 中的 $unwind 2 个字段

这是文件:

{
    "_id" : "1",
    "details" : {
        "phonenumber" : [
            "1",
            "2"
        ],
        "name" : [
            "a",
            "b"
        ]
    }
}

我正在尝试构建一个查询,它将返回以下结果:

{ "_id" : "1", "phonenumber" : "1", "name" : null },
{ "_id" : "1", "phonenumber" : "2", "name" : null },
{ "_id" : "1", "phonenumber" : null, "name" : "a" },
{ "_id" : "1", "phonenumber" : null, "name" : "b" }

有人可以帮我吗?

我能找到的最接近的解决方案是通过以下查询:

db.document.aggregate( [ { $unwind: { path: "$details.name"} }, { $unwind: { path: "$details.phonenumber" } }, { $project: { _id: 1, name: "$details.name", phonenumber: "$details.phonenumber" } } ] )

上面查询的输出是:

{ "_id" : "1", "phonenumber" : "1", "name" : "a" },
{ "_id" : "1", "phonenumber" : "1", "name" : "b" },
{ "_id" : "1", "phonenumber" : "2", "name" : "a" },
{ "_id" : "1", "phonenumber" : "2", "name" : "b" }

随着MongoDB v3.4,可能的解决方案将是一个,

db.document.aggregate({
    '$facet': {
        'phonenumber': [{
            '$unwind': '$details.phonenumber'
        }, {
            '$project': {
                phonenumber: '$details.phonenumber',
                name: null
            }
        }],
        'name': [{
            '$unwind': '$details.name'
        }, {
            '$project': {
                name: '$details.name',
                phonenumber: null
            }
        }]
    }
}, {
    '$project': {
        'combined': {
            '$setUnion': ['$phonenumber', '$name']
        }
    }
}, {
    '$unwind': '$combined'
}, {
    '$replaceRoot': {
        'newRoot': '$combined'
    }
})

facet允许我们在单个阶段中包含多个聚合管道,从 3.4 版开始提供

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

在mongodb中展开嵌入式文档

在文档中引用文档的嵌入式数组的嵌入式数组上查询Doctrine2和MongoDB

如何查询Mongodb的嵌入式数组

MongoDB嵌入式文档数组:仅获取一个具有特定属性的嵌入式文档

映射-Symfony2中的Mongodb嵌入式文档

在mongoDb中对嵌入式文档数组(3个级别)进行过滤查询

如何在嵌入式数组mongodb中查询嵌入式文档

基于范围查询MongoDB中嵌入式文档的数组

查询Spring Data MongoDB中嵌入式文档的数组

更新mongodb嵌入式数组中的所有元素

使用Presto查询MongoDB嵌入式/嵌套文档的数组

嵌入式数组mongodb上的$ pull / $ pop

MongoDB对数组和嵌入式文档的条件验证

在数组mongodb中查找嵌入式对象

嵌入式文档数组中的MongoDB Aggregate ObjectId

在MongoDB中搜索嵌入式数组(使用Java)

MongoDB嵌入式搜索

mgo,mongodb:查找一个嵌入式文档,该文档是数组的一部分

mongodb的嵌入式文档可以在web2py DAL中建模吗?

并排放置2个div框,它们的宽度和宽度分别为50%和100%,展开到100%时,每个框上的整个宽度都将悬停

将嵌入式文档数组转换为mongoDB中的元素数组

查询MongoDB中的嵌入式文档

mongodb汇总嵌入式文档值

何时使用嵌入式文档MongoDB

Mongodb对嵌入式文档的本机验证

mongodb嵌入式文档搜索

Mongodb嵌入式文档最佳实践

在 MongoDB 中搜索嵌入式文档?

返回特定的mongodb嵌入式文档