2012-08-03 71 views
0

好吧,我需要我的灯泡开关。近一周来我一直在为此苦苦挣扎,而且越来越困惑。猫鼬,节点和异步编码howto

我有这些集合:

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 

可能有人给我的伪代码来解释如何做到这一点的节点和猫鼬?我需要学会如何钓鱼;)

回答

2

这很容易让人感到沮丧和困惑,特别是当你一次尝试和学习多件事时。不要试图让东西去工作;从底部开始,沿着堆栈走。在您完全理解它所依赖的图层之前,抵制前进到下一层的诱惑。

  1. 的JavaScript
  2. Node.js的
  3. MongoDB的
  4. 猫鼬

您将了解你的技能forEach在步骤1,在步骤2中的异步回调的技能,你会明白如何在步骤3中使用find您的文档,并且您将在步骤4中将它们放在一起。如果您真的想'学会钓鱼',没有捷径可走。

+0

开始使用节点中的异步库,有点帮助;)达到了我有一些工作的地步。然而,并不完全确定,但它是如何工作的......这是本周的项目! – jmls 2012-08-05 08:50:55

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"}您的订单中,但请记住,您将需要保持它一贯的在文档修改/插入过程中手。

+0

感谢 - 这不是真正的数据库结构,我需要清理(这是下一个工作)。由于发现({})和forEach的回调,我可以获取所有数据,只是不按我期望的顺序排列。 – jmls 2012-08-03 15:28:24

+1

我知道,但手工加入很容易出错。一旦我稍后有点时间,我会用一些伪代码逻辑编辑我的答案。顺便说一下,我会使用[Step](https://github.com/creationix/step/)的'parallel'功能来使其可行。 – LoG 2012-08-03 16:53:34