gpt4 book ai didi

javascript - 在推送到数组时更新插入文档

转载 作者:太空宇宙 更新时间:2023-11-03 21:58:10 25 4
gpt4 key购买 nike

我有以下架构:

var TestSchema = db.Schema({
name: { type: String, required: true, unique: true }
data: []
},
{ strict: false });

var Test = db.model('Test', TestSchema);

注意它是strict: false。我希望能够更新插入新文档。问题是,我不希望 data 数组被覆盖,而是希望将新文档插入其中。

例如,假设这是一个现有文档:

{ name: "hello world",
data:
[ { one: '123',
two: '456' } ]
}

我希望更新插入这个:

{ name: "hello world",
new_field: "to be updated"
data:
[ { one: 'pushed to the array',
two: 'xyz' } ]
}

预期结果是:

{ name: "hello world",
new_field: "to be updated"
data:
[ { one: 'abc',
two: 'xyz' },
{ one: 'pushed to the array',
two: 'xyz'} ]
}

明确说明:该文档已经存在,因此应该更新。新字段 new_field 已更新。但是,我们不会覆盖现有的 data 数组(如常规更新那样),而是将新文档推送到数组中。

我有一个非常丑陋的工作版本,它使用三个调用来实现此目的,这是完全无法使用的(异步 -> 当您同时抛出多个查询时,重复项会被插入而不是更新)。

这实际上可以在 Mongoose 中实现吗?

最佳答案

你可以像这样使用$push:

{$set:{ new_field: "to be updated" },$push:{data:{ one: 'pushed to the array',two: 'xyz' }}}

更新查询将是:

db.test.update({name: "hello world"}, {
$set:{ new_field: "to be updated" }
$push:{data:{ one: 'pushed to the array',two: 'xyz' }}});

关于javascript - 在推送到数组时更新插入文档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34743131/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com