查找并更新子文档,如果不存在则创建新的子文档

时间:2018-12-16 11:55:44

标签: javascript node.js mongodb mongoose bulkupdate

我正在推送一个updateOne查询来更新(或创建一个不存在的)子文档。这是我的模式

{
    accountData: {
        userId: Number,
        items: [
            {
                itemId: Number,
                purchaseTime: Number
            }
        ]
    }
}

这是示例文档

{
    accountData: {
        userId: 1,
        items: [
            {
                itemId: 2,
                purchaseTime: 3
            },
            {
                itemId: 3,
                purchaseTime: 5
            }
        ]
    }
}

当我运行以下批量查询以查找和更新itemId的2和4的PurchaseTime值时,出现错误。这是查询

let bulkQuery = [];
bulkQuery.push({
    updateOne: {
        filter: {
            'accountData.userId': 1,
            'accountData.items.itemId': 2
        },
        update: {
            $inc: {
                'accountData.items.$.purchaseTime': 1
            }
        },
        upsert: true,
        setDefaultsOnInsert: true
    }
});

bulkQuery.push({
    updateOne: {
        filter: {
            'accountData.userId': 1,
            'accountData.items.itemId': 4
        },
        update: {
            $inc: {
                'accountData.items.$.purchaseTime': 1
            }
        },
        upsert: true,
        setDefaultsOnInsert: true
    }
});

MyModel.bulkWrite(bulkQuery);

我提供的文档的预期更改是将itemId = 2的purchaseTime从3增加到4,并添加一个具有itemId = 4和PurchaseTime = 1的新item对象。但是,运行此命令时,出现以下错误

  

BulkWriteError:位置运算符未找到所需的匹配项   从查询中。未展开的更新:accountData.items。$。purchaseTime

0 个答案:

没有答案