猫鼬,节点和异步编码howto

时间:2012-08-03 14:09:38

标签: javascript node.js mongodb asynchronous mongoose

好的,我需要打开电灯泡。我现在已经挣扎了将近一个星期,而且越来越困惑。

我有这些收藏品:

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中执行此操作吗?我需要学习如何钓鱼;)

2 个答案:

答案 0 :(得分:2)

很容易感到沮丧和困惑,特别是当你尝试一次学习多个东西时。不要只是试图让东西上班;从底部开始,沿着堆栈前进。抵制诱惑,继续前进到下一层,直到你完全理解它所依赖的层为止。

  1. 的JavaScript
  2. Node.js的
  3. MongoDB的
  4. 猫鼬
  5. 您将在第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"},但请记住,在文档修改/插入期间,您需要手动保持一致。