【问题标题】:How can I use $out operator after $inwind in MongoDB如何在 MongoDB 中的 $inwind 之后使用 $out 运算符
【发布时间】:2019-11-23 19:50:44
【问题描述】:

我有一个集合 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 的文档,这是问题所在吗?我该如何解决这个问题?

【问题讨论】:

  • 1) 集合名称不应以 $ 符号开头。 2) $unwind 运算符创建了 2 个具有相同 _id 的文档,这是问题所在吗?是的

标签: mongodb aggregation-framework


【解决方案1】:

您不应该在新的集合名称中使用美元符号。当您修复该问题时,您将收到另一个错误,即您的 _id 值重复(因为 $unwind),因此您可以使用 $project 取消设置旧值,MongoDB 将生成新值:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-06-13
    • 2020-09-18
    • 2019-07-14
    • 2013-12-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多