gpt4 book ai didi

mongodb - meteor 合集 : find element in array

转载 作者:可可西里 更新时间:2023-11-01 09:09:39 26 4
gpt4 key购买 nike

我没有使用 NoSQL 的经验。所以,我认为,如果我只是尝试询问代码,我的问题可能是不正确的。相反,让我解释一下我的问题。

假设我有电子商店。我有目录

Catalogs = new Mongo.Collection('catalogs);

以及该目录中的产品

Products = new Mongo.Collection('products');

然后,人们将那里的订单添加到临时集合

Order = new Mongo.Collection();

然后,人们提交他们的评论、电话等并下订单。我将它保存到集合操作中:

Operations.insert({
phone: "phone",
comment: "comment",
etc: "etc"
savedOrder: Order //<- Array, right? Or Object will be better?
});

很好,但是当我想获取每个产品的统计信息时,在哪些运营产品中使用过。我如何搜索我的操作并找到该产品的每个操作?

还是这种方式不好?真正的专业人士如何在现实世界中做到这一点?

最佳答案

如果我理解得很好,这里有一个存储在您的 Operation 集合中的示例文档:

{
clientRef: "john-001",
phone: "12345678",
other: "etc.",
savedOrder: {
"someMetadataAboutOrder": "...",
"lines" : [
{ qty: 1, itemRef: "XYZ001", unitPriceInCts: 1050, desc: "USB Pen Drive 8G" },
{ qty: 1, itemRef: "ABC002", unitPriceInCts: 19995, desc: "Entry level motherboard" },
]
}
},
{
clientRef: "paul-002",
phone: null,
other: "etc.",
savedOrder: {
"someMetadataAboutOrder": "...",
"lines" : [
{ qty: 3, itemRef: "XYZ001", unitPriceInCts: 950, desc: "USB Pen Drive 8G" },
]
}
},

鉴于此,要查找具有项目引用 XYZ001所有 操作,您只需查询:

> db.operations.find({"savedOrder.lines.itemRef":"XYZ001"})

这将返回整个文档。相反,如果您只对客户端引用(和操作 _id)感兴趣,您将 use a projection as an extra argument to find :

> db.operations.find({"savedOrder.lines.itemRef":"XYZ001"}, {"clientRef": 1})
{ "_id" : ObjectId("556f07b5d5f2fb3f94b8c179"), "clientRef" : "john-001" }
{ "_id" : ObjectId("556f07b5d5f2fb3f94b8c17a"), "clientRef" : "paul-002" }

如果你需要执行多文档(包括多嵌入文档)操作,你应该看看 aggregation framework :

例如,计算一个订单的总额:

> db.operations.aggregate([
{$match: { "_id" : ObjectId("556f07b5d5f2fb3f94b8c179") }},
{$unwind: "$savedOrder.lines" },
{$group: { _id: "$_id",
total: {$sum: {$multiply: ["$savedOrder.lines.qty",
"$savedOrder.lines.unitPriceInCts"]}}
}}
])
{ "_id" : ObjectId("556f07b5d5f2fb3f94b8c179"), "total" : 21045 }

关于mongodb - meteor 合集 : find element in array,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30611959/

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