Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何持久地将不同的值从collectionA映射到collectionB?流星蒙戈_Javascript_Mongodb_Meteor - Fatal编程技术网

Javascript 如何持久地将不同的值从collectionA映射到collectionB?流星蒙戈

Javascript 如何持久地将不同的值从collectionA映射到collectionB?流星蒙戈,javascript,mongodb,meteor,Javascript,Mongodb,Meteor,是否有任何方法可以获取mongodb中特定字段的所有唯一值(比如collectionA)并将其映射到collectionB,同时保持如果collectionA获得另一个新条目,collectionB将自动更新 so if collectionA has the following: { itemCode: "aaa", purchaseOrder: "po1" }` { itemCode: "aaa", purchaseOrder: "po2" } { itemCode: "bbb", pur

是否有任何方法可以获取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”}


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

您可以使用collectionA.map(a=>a.itemCode)而不是collectionB

我不认为引用映射本身就是一种选择


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

您可以使用
.upsert()
来避免重复的第一部分:

const A = CollectionA.find();
A.map( a => {
  const itemCode = a.itemCode;
  CollectionB.upsert({ itemCode },{ $set: { itemCode });      
});
您可以通过首先使用和/或仅查找A中B中没有值的那些元素来查找
itemCode
的唯一值,从而进一步优化这一点

第二位可以通过观察者完成

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

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

否。无触发器,无事件。但是您可以根据需要获取不同的项目代码:
db.collectionA.distinct(“itemCode”)
通过查询
collectionA.find().map(a=>{…
这会返回一个包含
.map()
查询的光标吗?还是只返回
collection.find()
我很困惑,因为我不确定如何使用
.map()…
部分观察整个查询…你是对的。集合需要分离出来,以便在观察者中重用。我测试了你提供的解决方案。通过简单地使用
upsert()
你可以得到所有不同的值,我不确定它是否为O(n)复杂性,因为我不知道
upsert()
的效率是多少,但我认为我不会过分优化解决方案。感谢@MichelFloyd提供的解决方案。
A.observe({
  added(a){
    const itemCode = a.itemCode;
    CollectionB.upsert({ itemCode },{ $set: { itemCode });
  }
});