我有一个收藏集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个文档,这是问题吗?我该怎么解决?
答案 0 :(得分:1)
您不应在新的收藏名称中使用美元符号。修复此问题后,您还会收到另一个错误,即_id
的值是重复的(由于$unwind
),因此您可以使用$project
取消旧值,MongoDB会生成新值:< / p>
db.col.aggregate([{$unwind:"$key1"}, { $project: { _id: 0 } }, {$out:"newMyCol"}])