我在Mongo数据库中错误地插入了多个文档。我不小心将数据嵌套在另一个数据对象中:
{
"_id": "5cdfda8ddc5cf00031fd3949",
"payload": {
"timestamp": "2019-05-18T10:12:29.896Z",
"data": {
"data": {
"name": 10,
"age": 10,
}
}
},
"__v": 0
}
我希望文档中没有多余的数据对象。所以我希望它看起来像这样:
{
"_id": "5cdfda8ddc5cf00031fd3949",
"payload": {
"timestamp": "2019-05-18T10:12:29.896Z",
"data": {
"name": 10,
"age": 10,
}
},
"__v": 0
}
在Mongo中,我是否可以将所有具有2个数据对象的文档更新为仅具有上面所示的文档?
答案 0 :(得分:0)
A,您不能使用一个数据库请求来执行此操作。您必须以编程方式遍历所有文档,设置新数据并在数据库中更新它们。
答案 1 :(得分:0)
您可以使用aggregation framework,它不会让您到位进行更新,但是如果可以的话,您可以使用$out operator将结果写到新集合中。
db.collection.aggregate([
{
$project: {
__v : 1,
"payload.timestamp" : 1,
"payload.data" : "$payload.data.data"
},
},
{
"$out": "newCollection"
}
])
或者,如果您混合使用格式正确的文档和格式错误的文档,则可以使用$cond operator确定正确的输出:
db.collection.aggregate([
{
$project: {
__v : 1,
"payload.timestamp" : 1,
"payload.data" : {
$cond: [
{ $ne : [ "$payload.data.data", undefined]},
"$payload.data.data",
"$payload.data"
]}
}
},
{
"$out": "newCollection"
}
])