结合Mongodb中不同文档的两个字段

Dan*_*res 5 mongodb

我把这些文件放在一个集合中:

   {topic : "a",
    messages : [ObjectId("21312321321323"),ObjectId("34535345353"),...]
   },
   {topic : "b,
    messages : [ObjectId("1233232323232"),ObjectId("6556565656565"),...]
   }
Run Code Online (Sandbox Code Playgroud)

是否有可能通过消息字段的组合获得结果?我想以此为例:

     {[
       ObjectId(""),ObjectId(""),ObjectId(""),ObjectId("")
     ]}
Run Code Online (Sandbox Code Playgroud)

我认为这可以通过MapReduce实现,但在我的情况下,文档没有任何共同之处.现在我正在使用javascript和循环在后端执行此操作,但我认为这不是最佳选择.谢谢.

jar*_*red 5

您可以$group聚合框架中使用运算符。当然,要使用聚合框架,您需要确保在 MongoDB 2.2 或更新版本上运行。

如果与$push您一起使用,您将获得所有连接在一起的消息列表。

db.myCollection.aggregate({ $group: { messages: { $push: '$messages' } } });
Run Code Online (Sandbox Code Playgroud)

如果与$addToSet您一起使用,您将只获得不同的值。

db.myCollection.aggregate({ $group: { messages: { $addToSet: '$messages' } } });
Run Code Online (Sandbox Code Playgroud)

如果你想先过滤候选文档,你可以使用$match.

db.myCollection.aggregate([
    { $match: { topic: { $in: [ 'a', 'b' ] } } },
    { $group: { matches: { $sum: 1 }, messages: { $push: '$messages' } } }
]);
Run Code Online (Sandbox Code Playgroud)