MONGODB 聚合管道
MONGODB Aggregate pipeline
有以下文档:
{
"_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 和 studio3t 任何帮助将不胜感激
问候
来自Mongo docs:
Otherwise, starting in MongoDB 3.6, the server permits storage of field names that contain dots (i.e. .) and dollar signs (i.e. $).
因此,虽然 Mongo v3.6+ 确实允许字段名称包含点,但它们仍然提供以下警告:
Until support is added in the query language, the use of $ and . in field names is not recommended and is not supported by the official MongoDB drivers.
所以 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",
}
}
有以下文档:
{
"_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 和 studio3t 任何帮助将不胜感激 问候
来自Mongo docs:
Otherwise, starting in MongoDB 3.6, the server permits storage of field names that contain dots (i.e. .) and dollar signs (i.e. $).
因此,虽然 Mongo v3.6+ 确实允许字段名称包含点,但它们仍然提供以下警告:
Until support is added in the query language, the use of $ and . in field names is not recommended and is not supported by the official MongoDB drivers.
所以 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",
}
}