【问题标题】:$set is not working on mongodb update$set 不适用于 mongodb 更新
【发布时间】:2017-03-19 02:20:53
【问题描述】:

所以我正在使用nodeJS 和mongoDB。我在更新收藏时遇到了问题,自从我开始研究它已经一周了,这真的让我很头疼。所以这是我的样本集

{
  "_id": ObjectId('51299sdfasdf') //this is just a sample Id     
  "names": [
      "NameA",
      "NameB",
      "NameC"   
   ],
  "names_id": [
     ObjectId('asdfasdf1312'),
     ObjectId('12sda123123a'),
     ObjectId('asdf1212123a')
  ],
  "user_alias": "SampleA"
}

那么这是我的脚本

var mongoose = require('mongoose');
var model = mongoose.model('Sample');

model.update( { _id: req.query._id }, 
       {
          $set: {
             names: namesArray, //this are set of names ex; ['name1', 'name2']
             names_id: namesIdArray //this are set of ids ex: [ ObjectId('sgsdfgsd'), ObjectId('asdfasdfadf')
          },
       },
       function(err, results) {
           if(err) res.status(500).send(err);
               console.log(results);


           }  
       );

我知道我的编码是正确的。在 names_id 数组中,我指定了所有对象 ID,例如 mongoose.mongo.ObjectId('id here')。但它不会更新任何东西。这是结果。

{ ok: 1, nModified: 0, n: 1 }

这里有什么问题?这是因为版本吗?我的mongoose 版本是2.15.8

请帮帮我!谢谢!

【问题讨论】:

  • 您确定req.query._id 已定义吗?此外,没有 Mongoose 版本 2.15.8。
  • 是的,它已定义。以及关于版本。当我在我的 git npm mongoose -v 上输入它时。 2.15.8。这会出现
  • 我认为 Mongoose 或 MongoDB 没有问题。您可以尝试打印req.query.id 的值吗?我认为它没有更新它的原因是它没有具有该特定 ID 的记录。
  • @JoshuaFabillar 是 npm 的版本 :D 对于 Mongoose 版本,使用 npm ls mongoose。
  • @JoshuaFabillar 只是为了确定:Mongoose 将使用的集合称为samples。我之所以提到这一点,是因为人们认为模型的名称 (Sample) 也是正在使用的集合的名称,这已经不是第一次了。

标签: node.js mongodb


【解决方案1】:

别那么沮丧,猫鼬没有错, 我认为你的问题是因为 req.query.id 是一个字符串 您需要先将字符串转换为 ObjectId

文档没有更新,因为它没有找到任何文档,没有其他原因只是将_id转换为对象id

阅读此内容以将 Id 转换为 Id 的对象 Convert string to ObjectID in MongoDB

【讨论】:

  • Mongoose 会自动将字符串转换为 ObjectId。
  • 不,它不会投射检查这个stackoverflow.com/questions/6578178/…
  • 这个问题已经超过 5 年了。当前版本的 Mongoose 将投射(这里有一个演示:gist.github.com/robertklep/1a227242c78d7415407dfdca3617ab5b)
  • 但是你的例子他们已经把它转换成字符串
  • 该示例将ObjectId 转换为字符串,并将该字符串用作查询输入。 Mongoose 将自动转换回ObjectId。表明您不需要自己转换为ObjectId。
猜你喜欢
  • 1970-01-01
  • 2020-11-30
  • 2018-07-06
  • 2014-11-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-13
  • 1970-01-01
相关资源
最近更新 更多