首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >从一个文档数组聚合到另一个文档数组

从一个文档数组聚合到另一个文档数组
EN

Stack Overflow用户
提问于 2018-03-23 08:19:55
回答 1查看 257关注 0票数 1

我正在尝试从一种数据结构转换到另一种数据结构,并使用NoSQL Booster,因为与使用Mongo脚本相比,我更愿意使用SQL查询,这有点懒惰,但到目前为止,它对我来说是有效的。

我有一份文件,它有一系列代表销售收据的行项目。这一行项目是出售的项目。

我使用了下面的SQL查询来生成Mongo脚本来选择,然后从一个文档中重命名值以创建另一个文档。我陷入困境的地方是从数组中选择一些字段,并将它们重命名为新数组中的新文档。

代码语言:javascript
运行
复制
mb.runSQLQuery(`

   SELECT   object_origin, 
            party_uuid AS company,
            connection_uuid AS connection,
            object_created AS object_creation_date,
            "object_raw_origin_data.register_sales.sale_date" AS transaction_date,
            "object_raw_origin_data.register_sales.total_price"
            + "object_raw_origin_data.register_sales.total_tax" AS transaction_gross_value,
            "object_raw_origin_data.register_sales.total_price" AS transaction_net_value,
            'goods-service-transaction' AS object_class,
            'point-of-sale' AS object_origin_category,
            'offline' AS object_origin_type,
            object_origin AS object_origin,
            "object_raw_origin_data.register_sales.invoice_number" AS transaction_reference,
            "object_raw_origin_data.register_sales.status" AS transaction_status,
            'GBP' AS transaction_currency,
            "object_raw_origin_data.register_sales.sale_products.name" AS 'line_items.item_name'

   FROM Vend_raw_transactions

`)

除了最后一行之外,上面的查询都能工作,这一行在名为line_items的文档中创建了一个对象,但它不是数组。源也是一个数组。

下面是它为我创建的Mongo脚本:

代码语言:javascript
运行
复制
  db.Vend_raw_transactions.aggregate(
[{
  "$project": {
    "object_origin": "$object_origin",
    "company": "$party_uuid",
    "connection": "$connection_uuid",
    "object_creation_date": "$object_created",
    "transaction_date": "$object_raw_origin_data.register_sales.sale_date",
    "transaction_gross_value": {
      "$add": [
        "$object_raw_origin_data.register_sales.total_price",
        "$object_raw_origin_data.register_sales.total_tax"
      ]
    },
    "transaction_net_value": 
"$object_raw_origin_data.register_sales.total_price",
    "object_class": "goods-service-transaction",
    "object_origin_category": "point-of-sale",
    "object_origin_type": "offline",
    "transaction_reference": 
"$object_raw_origin_data.register_sales.invoice_number",
    "transaction_status": "$object_raw_origin_data.register_sales.status",
    "transaction_currency": "GBP",
    "line_items.item_name": 
"$object_raw_origin_data.register_sales.sale_products.name"
 }
}])

有人知道为什么最后一句不适合我吗?

代码语言:javascript
运行
复制
"line_items.item_name": "$object_raw_origin_data.register_sales.sale_products.name"

我很确定我错过了一个*某个地方。谢谢,马特

编辑以添加Vend事务的示例

代码语言:javascript
运行
复制
{ 
"object_category" : "application", 
"object_type" : "register-sales-24-months", 
"object_origin" : "vend", 
"tenant_uuid" : "00000000-0000-0009-9999-999999999999", 
"party_uuid" : "8d519765-05d2-469f-ad35-d7a22fa9df2f", 
"subscription_uuid" : "0", 
"connection_uuid" : "6ed9bd79-d9c5-4296-a821-7e15b1c69e6c", 
"status" : "", 
"object_created" : ISODate("2018-03-15T21:40:57.158+0000"), 
"object_raw_origin_data" : {
    "pagination" : {
        "results" : NumberInt(75964), 
        "page" : NumberInt(1), 
        "page_size" : NumberInt(200), 
        "pages" : NumberInt(380)
    }, 
    "register_sales" : {
        "id" : "776a66f2-993c-b372-11e8-26f9bbe253f4", 
        "source" : "USER", 
        "source_id" : "", 
        "register_id" : "02dcd191-ae55-11e6-edd8-ec8dce1d9e1c", 
        "market_id" : "3", 
        "customer_id" : "02d59481-b67d-11e5-f667-b08185e8f6d5", 
        "customer_name" : "", 
        "customer" : {
            "id" : "02d59481-b67d-11e5-f667-b08185e8f6d5", 
            "name" : "", 
            "customer_code" : "WALKIN", 
            "customer_group_id" : "02d59481-b67d-11e5-f667-b08185e893f8", 
            "customer_group_name" : "All Customers", 
            "updated_at" : "2016-01-01 12:16:44", 
            "deleted_at" : "", 
            "balance" : "0", 
            "year_to_date" : "0", 
            "date_of_birth" : "", 
            "sex" : "", 
            "custom_field_1" : "", 
            "custom_field_2" : "", 
            "custom_field_3" : "", 
            "custom_field_4" : "", 
            "note" : "", 
            "contact" : {
            }
        }, 
        "user_id" : "02d59481-b655-11e5-f667-dca974edc4ea", 
        "user_name" : "Alvaro Velosa", 
        "sale_date" : "2018-03-13 20:04:57", 
        "created_at" : "2018-03-13 20:05:08", 
        "updated_at" : "2018-03-13 20:05:08", 
        "total_price" : 3.5, 
        "total_cost" : 2.74, 
        "total_tax" : NumberInt(0), 
        "tax_name" : "No Tax", 
        "note" : "", 
        "status" : "CLOSED", 
        "short_code" : "newa6f", 
        "invoice_number" : "Masonic2107Temple", 
        "accounts_transaction_id" : "", 
        "return_for" : "", 
        "register_sale_products" : [
            {
                "id" : "776a66f2-993c-b372-11e8-26f9cbf10f10", 
                "product_id" : "02dcd191-ae55-11e7-f130-9d4f4bcd91b1", 
                "register_id" : "02dcd191-ae55-11e6-edd8-ec8dce1d9e1c", 
                "sequence" : "0", 
                "handle" : "LAGERDRAUGHT300", 
                "sku" : "10287", 
                "name" : "LAGER DRAUGHT £3.00", 
                "quantity" : NumberInt(1), 
                "price" : 3.5, 
                "cost" : 2.74, 
                "price_set" : NumberInt(0), 
                "discount" : NumberInt(0), 
                "loyalty_value" : NumberInt(0), 
                "tax" : NumberInt(0), 
                "tax_id" : "02d59481-b67d-11e5-f667-b08185ec2871", 
                "tax_name" : "No Tax", 
                "tax_rate" : NumberInt(0), 
                "tax_total" : NumberInt(0), 
                "price_total" : 3.5, 
                "display_retail_price_tax_inclusive" : "0", 
                "status" : "CONFIRMED", 
                "attributes" : [
                    {
                        "name" : "line_note", 
                        "value" : ""
                    }
                ]
            }
        ], 
        "totals" : {
            "total_tax" : NumberInt(0), 
            "total_price" : 3.5, 
            "total_payment" : 3.5, 
            "total_to_pay" : NumberInt(0)
        }, 
        "register_sale_payments" : [
            {
                "id" : "776a66f2-993c-b372-11e8-26f9cd75e9aa", 
                "payment_type_id" : "1", 
                "register_id" : "02dcd191-ae55-11e6-edd8-ec8dce1d9e1c", 
                "retailer_payment_type_id" : "02d59481-b655-11e5-f667-b0a23bc0e7bc", 
                "name" : "Cash", 
                "label" : "Account Customer", 
                "payment_date" : "2018-03-13 20:04:57", 
                "amount" : NumberInt(10)
            }, 
            {
                "id" : "776a66f2-993c-b372-11e8-26f9cd7a3096", 
                "payment_type_id" : "1", 
                "register_id" : "02dcd191-ae55-11e6-edd8-ec8dce1d9e1c", 
                "retailer_payment_type_id" : "02d59481-b655-11e5-f667-b0a23bc0e7bc", 
                "name" : "Cash", 
                "label" : "Account Customer", 
                "payment_date" : "2018-03-13 20:04:57", 
                "amount" : -6.5
            }
        ]
    }
}
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-03-23 09:32:10

通过将数组元素映射到$map键,使用item_name运算符将字段形状为数组:

代码语言:javascript
运行
复制
"line_items": {
    "$map": {
        "input": "$object_raw_origin_data.register_sales.register_sale_products",
        "as": "product",
        "in": { "item_name": "$$product.name" }
    }
}              

输出

代码语言:javascript
运行
复制
"line_items" : [ 
    {
        "item_name" : "LAGER DRAUGHT £3.00"
    }
]
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49445177

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档