如何持久地将不同的值从collectionA映射到collectionB?流星猫鼬

时间:2017-11-08 15:16:10

标签: javascript mongodb meteor

有没有办法可以在一个mongodb中获取特定字段的所有唯一值,并将其映射到collectionB,同时保持如果collectionA获得另一个新条目,则collectionB会自动更新?

so if collectionA has the following: 
{ itemCode: "aaa", purchaseOrder: "po1" }`
{ itemCode: "aaa", purchaseOrder: "po2" }
{ itemCode: "bbb", purchaseOrder: "po3" }

collectionB should have 
{ itemCode: "aaa" }
{ itemCode: "bbb" }

如果条目进入collectionA { itemCode: "ccc", purchaseOrder: "po4" }

collectionB automatically gets updated with
{ itemCode: "aaa" }
{ itemCode: "bbb" }
{ itemCode: "ccc" }

有没有一种有效的方法来实现这一目标?

2 个答案:

答案 0 :(得分:1)

您只需使用.upsert()来避免欺骗即可完成第一部分:

const A = CollectionA.find();
A.map( a => {
  const itemCode = a.itemCode;
  CollectionB.upsert({ itemCode },{ $set: { itemCode });      
});

您可以通过首先使用_.uniq()查找itemCode的唯一值和/或仅查找不具有B值的A的元素来进一步优化此项。

第二位可以由观察者完成。

A.observe({
  added(a){
    const itemCode = a.itemCode;
    CollectionB.upsert({ itemCode },{ $set: { itemCode });
  }
});  

我们再次使用.upsert()来避免欺骗。

答案 1 :(得分:0)

您可以使用collectionA.map(a => a.itemCode)代替collectionB。

我不认为参考映射本身就是一种选择。

此外,您只是在您的案例中复制数据。