gpt4 book ai didi

javascript - 如何查询 mongodb 以使用购买历史记录构建集合项目

转载 作者:行者123 更新时间:2023-12-02 22:45:40 26 4
gpt4 key购买 nike

这里是 MongoDB 菜鸟。请耐心等待我这篇很长的文章,我试图包含大部分信息。

对于单个订单,我有以下文档结构(仅包含相关字段),并且我从 SQL 数据库导出了许多这样的订单。

从这些文档中,我想找出给定 product_id 经常聚集在一起的项目。其中 product_id 是嵌套在 order_summary->products

内的字段
{
"_id": "5d9de7fbbcd759252825b182",
"order_id": 100000,
"user_id": 9425,
"order_summary": {
"products": [
{
"name": {
"en": "Product A"
},
"price": "2.400",
"quantity": 2,
"product_id": 100,
"variant_id": 98
},
{
"name": {
"en": "Product B"
},
"price": "3.900",
"quantity": 1,
"product_id": 401,
"variant_id": 395
}
]
},
"total": "16.895"
}

基本上我想实现以下目标

  • 给定产品 ID -> 获取包含该产品 ID 的所有订单
  • 从订单中获取这些订单中的所有其他product_id
  • product_id 与数量的 sum 组合在一起
  • 返回按数量总和排序的结果集

我成功地在根字段上查询了 Mongo DB,但是当涉及到查询嵌套字段时,我大多数时候都得到 null (可能是内部错误)。

到目前为止,我能够设置以下内容,但结果并不完全是我想要的

MongoClient.connect(url, { useUnifiedTopology: true, useNewUrlParser: true }, function (err, client) {
assert.equal(null, err);

const db = client.db(dbName);

orderCollection = db.collection('orders');
orderCollection.aggregate([
{ $match: {"order_summary.products.product_id": 100} }, // 100 is the product_id I want to match with
{ $group: {
_id: "$order_summary.products.product_id",
total: {$sum: "$order_summary.products.quantity"}
}
}
]).toArray(function (err, docs) {

console.log("Found the following records");
console.log(docs);
client.close();
});
});

我得到的结果

Found the following records
[
{ _id: [ 100, 937 ], total: 0 },
{ _id: [ 70, 100, 209, 1338, 8572 ], total: 0 },
{ _id: [ 100, 401, 754 ], total: 0 },
{ _id: [ 100, 401, 705, 8134 ], total: 0 },
{ _id: [ 100, 705, 942 ], total: 0 },
{ _id: [ 100, 670 ], total: 0 }
]

我期望的结果

[
{_id: 100, total: 150},
{_id: 70, total: 140},
{_id: 401, total: 135},
.....
{_id: 670, total: 1},
]

我正在使用 mongodb": "^3.3.2,Javascript 客户端和 mongodb `MongoDB 4.0.12 社区,如果需要发布更多信息,请告诉我

最佳答案

下面的查询将给出您预期的结果。

[{$unwind: {
path:"$order_summary.products"
}}, {$group: {
_id: "$order_summary.products.product_id",
total: {$sum: "$order_summary.products.quantity"}
}}]

结果如下

{
"_id" : 670.0,
"total" : 4.0
},
{
"_id" : 70.0,
"total" : 24.0
},
{
"_id" : 100.0,
"total" : 10.0
}

关于javascript - 如何查询 mongodb 以使用购买历史记录构建集合项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58411421/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com