是否可以合并两个或更多不同的collections
并按createdAt?
e.g。我有一些数据,如
CollectionA.insert({
createdAt: new Date(),
field1: value1,
field2: value3,
field3: value2,
});
CollectionB.insert({
createdAt: new Date(),
field4: value4,
field5: value5,
field6: value6,
field7: value7,
});
我想在服务器上合并和订购它们,客户端稍后通过订阅获得合并的CollectionC。 如何合并和订购馆藏?我想尽可能便宜地做到这一点
答案 0 :(得分:2)
无法同时查询两个集合。所以你有两个解决方案:
collectionA
选择一个查询中的所有内容,从collectionB
选择所有内容,在应用层上对所有内容进行排序并获得结果。很容易看出,一旦你有任何合理的尺寸,这将变得不可扩展。你可以做一些工作(比如仅选择仅接近createdAt
的元素),但它仍然很糟糕。type: 1|2
。这样您就可以对数据库层(不是应用程序层)进行排序。我如何合并它们。我会在mongoshell中执行此操作:
db.collectionA.find().forEach(function(doc){
db.collectionB.insert(doc);
});
db.collectionA.drop()
在此之后,您将最终只使用collectionB,它将包含两个集合中的文档。
答案 1 :(得分:1)
总而言之:您必须在应用程序方面执行此操作,因为游标与集合相关联。因此,您必须手动合并结果集。
合并后,您可以使用以下方法对它们进行排序
function sortByField(a,b){
if(a.fieldName < b.fieldName) {
return -1;
}
else if(a.fieldName == b.fieldName){
return 0;
}
else return 1;
}
var sortedArray = mergedArray.sort(sortByField)