【发布时间】:2018-09-07 16:02:55
【问题描述】:
如果我有一些数据存储在 MongoDB 的两个集合中,如下所示:
集合 1:
opened = [{id: 1, value: 1123}, {id: 2, value: 4231}, {id: 2, value: 3322}...]
集合 2:
synched = [{id: 1, value: 12343}, {id: 2, value: 12322}, {id: 1, value: 12322}...]
现在我知道我可以对数据库进行两次调用并从两者中获取数据,但我有兴趣潜在地聚合调用并加入来自两个集合的数据,以便最终得到以下结果:
result = {synched: [{id: 1, value: 12343},{id: 1, value: 12322}], opened: [{id: 1, value: 1123}]}
所以就我而言,目前我只执行了两次标准查询:
db.opened.find({id: 1}, function(err, res){})
db.synched.find({id: 1}, function(err, res){})
有没有办法将它们结合起来?
编辑:
我发布的原始问题发生了一些变化。这是我需要处理的一个细微变化,以下答案不支持。
如果我有一个匹配的 id 数组怎么办:
{ $match: { 'id': {$in: [1,2]} }}
所以现在,limit 电话真的把这搞砸了。我需要的是来自synched 的所有文档和来自opened 的所有文档,它们与数组中的任何id 匹配,但只返回第一次遇到的限制。情况并非总是如此。可能有多个文档具有相同的 id 属性。该属性不是唯一的_id。
任何帮助将不胜感激。
【问题讨论】:
-
你能分享你的mongodb版本吗?
-
3.4.7 是我正在运行的 MongoDB
标签: mongodb mongoose aggregation-framework