arrays - 使用 db.someDb.update([]) 时,如何在不创建对象的情况下在 Mongodb 中 $set 数组?
问题描述
我见过类似的问题要更新和设置,但似乎没有一个能解决我在说的问题。假设您有带有以下文档的 antsDb
{ "name": "ant1", "antId": 1, "colId": "colony1" }
{ "name": "ant2", "antId": 2, "colId": "colony1" }
{ "name": "ant3", "antId": 3, "colId": "colony2" }
你有colonyDb
{ "colId": "colony1", "jobsArray": ["findFood", "workHard", "carryFood", "feedQueen"] }
{ "colId": "colony2", "jobsArray": ["childCare", "cutLeaves", "feedQueen"] }
我想更新每只蚂蚁,以便它们拥有各自殖民地的 jobsArray。但是当我为蚂蚁设置 jobsArray 时,我不想创建一个对象。我以为我可以把
db.colonyDb.aggregate([]).forEach(function(col) {
db.antsDb.update([
{
"colId": col.colId
},
{
$set: {
"myAntJobs": col.jobsArray
}
}
])
})
这将在每个不存在的匹配 ant 文档上设置一个名为 myAntJobs 的数组,从而导致
{ "name": "ant1", "antId": 1, "colId": "colony1", "myAntJobs": ["findFood", "workHard", "carryFood", "feedQueen"] }
{ "name": "ant2", "antId": 2, "colId": "colony1", "myAntJobs": ["findFood", "workHard", "carryFood", "feedQueen"] }
{ "name": "ant3", "antId": 3, "colId": "colony2", "myAntJobs": ["childCare", "cutLeaves", "feedQueen"] }
但我得到E QUERY [js] 错误:需要一个对象。我猜它想让我放一些类似的东西:
$set: {
"myAntJobs": {
"myJobs": col.jobsArray
}
}
这不会把蚂蚁身上的所有数组都变成一个字段的对象吗?还是我想错了……最大的问题是我真的没有测试的空间(尽管我花了很多精力来提出这个问题,但我可能会使用我刚刚输入的内容,哈哈)。
有人可以在功能上解释 $set 在这种情况下是如何工作的吗?此外,如果您知道一种更有效地将数组添加到 forEach 中的结果文档的更好方法,请告诉我。但我想首先在这种情况下理解 $set 。
解决方案
推荐阅读
- python - 如何在没有“闪烁”屏幕的情况下在 Python 中打印网格
- maven - 更改 vuejs 项目中 webpack 的 dist/ 文件夹的目的地(使用 frontend-maven-plugin)?
- circleci - 删除 CircleCI 上的桌面图片
- machine-learning - 为什么数字从我的 Seaborn 热图中移出?
- simple-form - simple_form - 更改关联图例文本
- react-native - (领域错误)扩展尚未初始化,无法访问 compileSdkVersion
- postgresql - 在库 (macOS 10.15.1) 中找不到 PostgreSQL,但 SHOW hba_file; 指向图书馆
- c# - 在有损设置中满时 Log4net 缓冲区不刷新
- ios - Swift 4.2 Segues:视图控制器堆叠而不是替换?
- google-cloud-storage - 谷歌云存储:更改存储桶区域