好的,我需要打开电灯泡。我现在已经挣扎了将近一个星期,而且越来越困惑。
我有这些收藏品:
Customers
Orders (linked to Customer by Customer_id)
OrderLines (linked to Order by Order_id)
Salesreps (linked to Customer by Customer_id)
我没有任何嵌入式文档。
我想要做的是获取一系列数据,包括以下内容:
Customer_1
Order#1:First_OrderLine_of_Order_Number
Order#n:First_OrderLine_of_Order_Number
SalesRep_of_Customer_Name
...
Customer_n
Order#1:First_OrderLine_of_Order_Number
Order#n:First_OrderLine_of_Order_Number
SalesRep_of_Customer_Name
有人可以给我伪代码来解释如何在node和mongoose中执行此操作吗?我需要学习如何钓鱼;)
答案 0 :(得分:2)
很容易感到沮丧和困惑,特别是当你尝试一次学习多个东西时。不要只是试图让东西上班;从底部开始,沿着堆栈前进。抵制诱惑,继续前进到下一层,直到你完全理解它所依赖的层为止。
您将在第1步中了解forEach
技能,在第2步中了解异步回调技巧,您将了解如何在步骤3中find
您的文档,并且您将完全放弃如果你真的想“学会捕鱼”,那就没有捷径了。
答案 1 :(得分:0)
在处理NoSQL(这项技术名称非常糟糕)时,您必须以不同的方式设置数据集。
在mongo中你没有连接,所以你必须重构你的数据。尽可能考虑嵌入式文档(例如,使用嵌入式订单行的订单)。
我会用这样的东西:
Order: {
_id: ObjectId
, user: DBRef // (or ObjectId)
, lines: [
{foo: "bar"}
, ...
]
}
User: {
_id: ObjectId
, salesref: { _id: ObjectId, name: "James Brown"}
, more_data ...
}
SalesRef: {
_id: ObjectId
, more_data...
}
保留对引用集合的最小引用,您甚至可以在订单中添加user: {name: "Max Power", sales: "James Brown"}
,但请记住,在文档修改/插入期间,您需要手动保持一致。