我想在我的文档中创建一个新字段,我们称它为"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/