MONGODB聚合管道

具有以下文档:

{ 
"_id" : ObjectId("xxx"),"seller" : {
    "phone" : {
        "number" : "xx"
    },"nickname" : "xx"
},"shipping" : {
    "id" : xx
},"id" : yyy,"order_items" : {
    "item" : {
        "title" : "xxxyy"
    },"quantity" : 1
}}

我需要转换为该输出

{ 
"_id" : ObjectId("xxx"),"seller.phone.number" : "xx","seller.nickname" : "xx","shipping.id" : "xx","order_items.item.title" :"xxxyy","order_items.quantity" : 1
}

如您所见,我需要做的是将文档展平到单个级别 我正在尝试以下代码,但mi输出静止图像会被嵌套

db.getcollection("collection").aggregate(
    [
        { 
            "$unwind" : { 
                "path" : "$order_items"
            }
        },{ 
            "$project" : { 
                "seller.phone.number" : 1.0,"seller.nickname" : 1.0,"shipping.id" : 1.0,"id" : 1.0,"order_items.item.title" : 1.0,"order_items.quantity" : 1.0
            }
        }
    ],{ 
        "allowDiskUse" : false
    }
);

我开始与mongodb和studio3t合作,将不胜感激 问候

visitede 回答:MONGODB聚合管道

来自Mongo docs

否则,从MongoDB 3.6开始,服务器允许存储包含点(即。)和美元符号(即$)的字段名称。

因此,尽管Mongo v3.6 +确实允许字段名称包含点,但它们仍提供以下警告:

直到在查询语言中添加了支持(使用$和)。建议不要使用字段名称中的字段,MongoDB官方驱动程序不支持该字段。

因此studio3t有一个自定义驱动程序,您可以使用它们来编写多种语言的查询,但我相信它们只是使用已调整为查询语言的核心驱动程序。

那是什么意思?这意味着驱动程序将seller.phone.number解析为嵌套对象。

您可以做的是在项目阶段更改字段名称:

{
    "$project" : {
        "seller_phone_number": "$seller.phone.number","seller_nickname": "$seller.nickname","id": 1,"shipping_id": "$shipping.id","order_item_quantity": "$order_items.quantity","order_item_title": "$order_items.item.title",}
}
本文链接:https://www.f2er.com/1266995.html

大家都在问