我正在使用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
我做错了吗?
答案 0 :(得分:4)
Mongodb 3.2现在支持此行为
来自MongoDB文档: 如果要更新的文档中缺少该字段,$ addToSet将创建具有指定值作为其元素的数组字段。
https://docs.mongodb.org/manual/reference/operator/update/addToSet/
答案 1 :(得分:2)
您必须在首次创建时使用空帐户阵列初始化帐户文档,或者如果您的第一个$push
失败,则使用$addToSet
。如果字段不存在,则$push
会创建一个新字段,而$addToSet
则不会。