在MongoDB中$ inwind之后如何使用$ out运算符

时间:2019-07-15 06:21:12

标签: mongodb aggregation-framework

我有一个收藏集myCol,其中包含许多这样的文档:

{
    "_id" : ObjectId("5d2b730470c3190b97c4dab0"),
    "key1" : [ 
               {el:"El1"},
               {el:"El2"}
             ]
}

,我想使用聚合运算符$unwind获取2个单独的文档,其中1个用于单个元素数组,在将聚合结果保存到新集合中之后。

如果我使用此查询,所有方法都可行:

db.myCol.aggregate([{$unwind:"$key1"}])

但是当我尝试使用$ out运算符保存结果时,MongoDB返回错误!

查询:db.myCol.aggregate([{$unwind:"$key1"},{$out:"$newMyCol"}])

错误:

 QUERY    [js] Error: command failed: {
        "ok" : 0,
        "errmsg" : "Can't $out to special collection: $newMyCol",
        "code" : 17385,
        "codeName" : "Location17385"
    }

$unwind运算符使用相同的_id创建2个文档,这是问题吗?我该怎么解决?

1 个答案:

答案 0 :(得分:1)

您不应在新的收藏名称中使用美元符号。修复此问题后,您还会收到另一个错误,即_id的值是重复的(由于$unwind),因此您可以使用$project取消旧值,MongoDB会生成新值:< / p>

db.col.aggregate([{$unwind:"$key1"}, { $project: { _id: 0 } }, {$out:"newMyCol"}])