我有一个接受多个值的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文档中添加了一个TieBreak列表,但我的目的是添加一个TieBreaks列表,该列表的每个值只填充一个文档,返回应该是这样的:
"tieBreak": [{
"_id": ObjectId("5ac61f8002e836a14c4ab2b1"),
"name": "wins"
},
{
"_id": ObjectId("5ac61f8002e836a14c4ab2b0"),
"name": "balance"
}]
我该怎么办?
谢谢
答案 0 :(得分:2)
试试这个:
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);
}
});
}
答案 1 :(得分:-2)
我认为最好的方法是一步一步做。例如:
1-获得冠军 2- forEach tieBreak,推进冠军 3-保存。
=)