我想在我的文档中创建一个新字段,我们称它为"shelf",它将是一个对象。
接下来我要做两个$set操作-我要将名为"Tom"和“anna”的数组放入我的"shelf"中。
问题是我无法匹配正确的查询来执行此操作。
我正在使用nodejs mongodb驱动程序。

var myid = 'Tom-Anna'
var TomArray = ["Tom"]
var AnnaArray = ["Anna"]

await db.collection('people').updateOne(
        { pairid: myid },
        { $set: { shelf: TomArray } },
        { upsert: true }
      )

await db.collection('people').updateOne(
        { pairid: myid },
        { $set: { shelf: AnnaArray } },
        { upsert: true }
      )

最后,"shelf"文档只包含"AnnaArray",因为它覆盖了以前添加的"TomArray"
我不能同时将"Tom""Anna"数组添加到"shelf"中,因为数组的内容是单独生成的。
我在尝试这个代码:
var name = 'Tom'
var array = ['Tom']
await db.collection('people').updateOne(
        { pairid: myid },
        { $set: { shelf[name]: array } },
        { upsert: true }
      )

但它抛出了以下错误:
{$set:{shelf[name]:数组},
^
syntaxerror:意外的标记[
我的目标是像json一样设置我的字段:
"shelf": { "Tom": ["Tom"], "Anna": ["Anna"] }

最佳答案

您可以使用dot notation指定嵌套密钥名:

var name = 'Tom'
var array = ['Tom']
db.people.update({ pairid: 1 }, { $set: { [`shelf.${name}`]: array } })

关于javascript - MongoDB-使用变量名称设置嵌套字段,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/57504993/

10-09 14:08