gpt4 book ai didi

node.js - 使用 nodeJS 将多个值推送到 mongodb 数组

转载 作者:可可西里 更新时间:2023-11-01 10:46:52 26 4
gpt4 key购买 nike

我有一个接受多个值的 mongodb 模式 (ChampionshipSchema):

tieBreak: [{
name: String,
priority : Number
}],

如果我在这个模式中一个一个地添加,没问题,但如果我尝试同时添加一个列表做值,我就会出错。

要添加到架构中的代码:

function createTable (idChampionship, tieBreaks, callback) {
// tieBreaks is an array of tieBreak values
var query = { _id : idChampionship };

var newValues = {
$push: { tieBreak: tieBreaks }
};

Championship
.update(query, newValues)
.exec((err, result) => {
if(err) callback (false);
else {
if (result.nModified > 0) {
callback(true);
} else {
callback(false);
}
}
});
}

结果是:

"tieBreak": [[{
"_id": ObjectId("5ac61f8002e836a14c4ab2b1"),
"name": "wins"
},
{
"_id": ObjectId("5ac61f8002e836a14c4ab2b0"),
"name": "balance"
}]]

这意味着此函数在一个 tieBreak 文档中添加了一个 TieBreaks 列表,但我的意图是添加一个 TieBreaks 列表并且该列表的每个值只填充一个文档,返回应该是这样的:

"tieBreak": [{
"_id": ObjectId("5ac61f8002e836a14c4ab2b1"),
"name": "wins"
},
{
"_id": ObjectId("5ac61f8002e836a14c4ab2b0"),
"name": "balance"
}]

我该怎么做?

谢谢

最佳答案

试试这个:

function createTable (idChampionship, tieBreaks, callback) {
const query = { _id : idChampionship };

// assuming tieBreaks is an array. without $each, mongoose just pushes the array as is.
const newValues = {
$addToSet: { tieBreak: {$each: tieBreaks } }
};

Championship
.updateOne(query, newValues)
.exec((err, result) => {
if(err) {
callback(false);
} else {
callback(result.nModified > 0);
}
});
}

关于node.js - 使用 nodeJS 将多个值推送到 mongodb 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49673447/

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