我可以 $addToSet 并插入一个数组吗?

Sha*_*oon 5 upsert mongoose mongodb node.js

我正在使用猫鼬,我的架构如下所示:

var WalletSchema = new Schema({
  accounts: [String]
});
Run Code Online (Sandbox Code Playgroud)

我的查询(Node.js)看起来像:

Wallet.update {accounts: account}, {$addToSet: {accounts: account}}, {upsert: true}, (err, updWallet) ->
  asyncCb err
Run Code Online (Sandbox Code Playgroud)

但是,wallets我的数据库中没有任何内容,我希望这会更新。它不是。相反,它返回一个错误:MongoError: Cannot apply $addToSet modifier to non-array

难道我做错了什么?

rat*_*rat 6

Mongodb 3.2 现在支持此行为

来自 MongoDB 文档: 如果要更新的文档中不存在该字段,则 $addToSet 将创建具有指定值的数组字段作为其元素。

https://docs.mongodb.org/manual/reference/operator/update/addToSet/


hei*_*nob 3

您必须在首次创建时使用空帐户数组初始化帐户文档,或者$push在第一次$addToSet失败时使用。$push如果该字段不存在,则创建一个新字段,而事实$addToSet并非如此。

  • 这可能在最近的 MongoDB 版本中发生了变化,但现在他们的文档中有这样的内容:“如果要更新的文档中不存在该字段,$addToSet 将创建一个以指定值作为其元素的数组字段。” (11认同)