MONGODB聚合管道
具有下列文件:MONGODB聚合管道,mongodb,studio3t,Mongodb,Studio3t,具有下列文件: { "_id" : ObjectId("xxx"), "seller" : { "phone" : { "number" : "xx" }, "nickname" : "xx" }, "shipping" : { "id" :
{
"_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",
"id" : yyy,
"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和Studio3合作,如有任何帮助,将不胜感激
蒙戈人的问候:
否则,从MongoDB 3.6开始,服务器允许存储包含点(即…)和美元符号(即$)的字段名
因此,尽管Mongo v3.6+允许字段名包含点,但它们仍然提供以下警告:
在查询语言中添加支持之前,请使用$and。不建议使用字段内名称,官方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",
}
}