我可以$ addToSet和upsert一个数组?

时间:2014-01-12 03:44:53

标签: node.js mongodb mongoose upsert

我正在使用Mongoose,我的架构看起来像:

var WalletSchema = new Schema({
  accounts: [String]
});

我的查询(Node.js)如下所示:

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

但是,我的数据库中没有任何wallets,我希望这会突然出现。它不是。相反,它会返回错误:MongoError: Cannot apply $addToSet modifier to non-array

我做错了吗?

2 个答案:

答案 0 :(得分:4)

Mongodb 3.2现在支持此行为

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

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

答案 1 :(得分:2)

您必须在首次创建时使用空帐户阵列初始化帐户文档,或者如果您的第一个$push失败,则使用$addToSet。如果字段不存在,则$push会创建一个新字段,而$addToSet则不会。