在MongoDB中使用聚合时生成唯一键? $ unwind后如何使用$ out?

时间:2017-10-11 02:39:38

标签: mongodb aggregation-framework

db.test.find()提供以下文档

/* 1 */
{
    "_id" : 1,
    "relatives" : [ 
        "A", 
        "B", 
        "C"
    ]
}
$unwinddb.test.aggregate([{ $unwind : "$relatives"}]))之后

,如果变为

/* 1 */
{
    "_id" : 1,
    "relatives" : "A"
}

/* 2 */
{
    "_id" : 1,
    "relatives" : "B"
}

/* 3 */
{
    "_id" : 1,
    "relatives" : "C"
}

现在,如果我想将$outdb.test.aggregate([{ $unwind : "$relatives"}, {"$out" : "new_collection"}]))文档放入另一个集合中,我将收到重复键错误。还有一个问题,他/她只是想删除重复的文件。但正如你所看到的,我将需要这些不同的文件。所以,我想重新计算ID或为每个文档创建唯一的ID,这样我就可以成功地收集这些集合。

编辑1: 我能够通过使用 ForEach 循环来解决这个问题......

count = 1;
db.test.aggregate([{ $unwind : "$relatives"}]).forEach(function (element){
    element._id = count;
    count++;
    db.new_collection.save(element);
});

...但我想知道是否有更优雅的方法来解决这个问题。

1 个答案:

答案 0 :(得分:0)

_id 发出 $project

对新集合使用 $out 聚合

db.test.aggregate([
  { $unwind : "$relatives"},
  { $project: {_id: 0,  relatives: 1},
  {$out: "newCollection"}
]));