【发布时间】:2022-01-03 04:43:07
【问题描述】:
如果我有这样的文件:
db.people.insertOne({name: "Annie", latestScore: 5});
然后基于this answer,我可以将latestScore 移动到这样的数组字段:
db.people.updateOne(
{name: 'Annie'},
[
{$set:
{scoreHistory:
{$concatArrays: [
{$ifNull: ["$scoreHistory", []]},
["$latestScore"]
]}
}
},
{ $unset: ["latestScore"] }
]
);
这是生成的文档:
{
_id: ObjectId("61d2737611e48e0d0c30b35b"),
name: 'Annie',
scoreHistory: [ 5 ]
}
我们可以对嵌套在数组中的对象执行相同的更新吗?例如,如果文档是这样的:
db.people.insertOne({
name: 'Annie',
words: [
{word: "bunny", score: 5},
{word: "pink", score: 5}
]
});
我们如何将其更新为:
{
name: 'Annie',
words: [
{word: "bunny", scoreHistory: [5]},
{word: "pink", scoreHistory: [5]}
]
}
我知道我可以从应用程序迭代和修改数组并立即更新整个数组,但我想使用上面第一个示例中的运算符来完成。
网站首先在行中显示words.word 和words.score,单击一行会在弹出窗口中显示words.scoreHistory。我希望单词数组小于 500。也欢迎任何关于重塑架构以简化上述操作的建议!
【问题讨论】:
标签: mongodb mongodb-query