有什么办法可以让mongodb中的某个特定字段的所有唯一值都说出collectionA,并将其映射到说出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" }


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

最佳答案

您可以通过仅使用.upsert()避免重复来做第一部分:

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


您可以通过使用_.uniq()首先找到itemCode的唯一值和/或仅找到A中在B中没有值的那些元素来进一步优化。

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

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


在这里,我们再次使用.upsert()避免重复。

08-19 14:00