Javascript 如何持久地将不同的值从collectionA映射到collectionB?流星蒙戈
是否有任何方法可以获取mongodb中特定字段的所有唯一值(比如collectionA)并将其映射到collectionB,同时保持如果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
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 });
}
});