db.test.find()
提供以下文档
/* 1 */
{
"_id" : 1,
"relatives" : [
"A",
"B",
"C"
]
}
在$unwind
(db.test.aggregate([{ $unwind : "$relatives"}])
)之后,如果变为
/* 1 */
{
"_id" : 1,
"relatives" : "A"
}
/* 2 */
{
"_id" : 1,
"relatives" : "B"
}
/* 3 */
{
"_id" : 1,
"relatives" : "C"
}
现在,如果我想将$out
(db.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);
});
...但我想知道是否有更优雅的方法来解决这个问题。
答案 0 :(得分:0)
用 _id
发出 $project
对新集合使用 $out
聚合
db.test.aggregate([
{ $unwind : "$relatives"},
{ $project: {_id: 0, relatives: 1},
{$out: "newCollection"}
]));