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

标签 node.js mongodb

我有一个接受多个值的 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/

相关文章:

node.js - 生成 mongoinsert

node.js - Multer fileFilter 未被调用且 req.body 为空

javascript - 在查询 mongodb 时,如何用数组中的斜杠替换字符串值?

javascript - MapReduce 函数 MongoDB NodeJs

MongoDB 项目在 "findAndModify"查询中更新了嵌套数组中的记录

mongodb - 如何在mongoDB中使用通配符字段?

mongodb - 组结果 mongoDB

php - 聊天和数据结构集成

javascript - 如何在 Elasticsearch 中进行精确匹配?

node.js - 在 Openshift(nodejs 应用程序)中使用目录(用于图像链接等)