2

我正在尝试编写一个节点程序,该程序采用数据流(使用 xml-stream)并将其合并并将其写入数据库(使用猫鼬)。我在弄清楚如何进行合并时遇到问题,因为在我处理下一条记录时数据可能还没有进入数据库。我正在尝试做类似的事情:

on order data being read from stream
  look to see if customer exists on mongodb collection 
    if customer exists 
      add the order to the document
    else
      create the customer record with just this order
    save the customer

我的问题是客户的两个“附近”订单导致写入重复的客户记录,因为在第二个检查是否存在之前没有写入第一个记录。

从理论上讲,我认为我可以通过暂停 xml 流来解决这个问题,但是有一个错误阻止我这样做。

4

2 回答 2

1

不确定这是不是最好的选择,但我最终会使用异步 队列。

在我这样做的同时,添加了允许暂停的xml-stream(这是我用来处理流的)的拉取请求。

于 2013-03-15T10:11:09.790 回答
0

来自流的数据中的客户对象是否有唯一字段?您可以在 mongoose 模式中添加唯一限制,以防止在数据库级别出现重复。

创建新客户时,添加一些后备逻辑来处理您尝试创建客户但同一客户同时由另一个保存创建的情况。发生这种情况时,再次尝试保存,但首先获取其他客户并将订单添加到获取的客户文档中

于 2013-03-12T21:12:30.993 回答