Node.js $set在mongodb更新中不起作用

Node.js $set在mongodb更新中不起作用,node.js,mongodb,Node.js,Mongodb,因此,我正在使用nodeJS和mongoDB。我在更新收藏时遇到了一个问题,我已经花了一个星期的时间来更新它了,这真的让我头疼。这是我的样本集 { "_id": ObjectId('51299sdfasdf') //this is just a sample Id "names": [ "NameA", "NameB", "NameC" ], "names_id": [ ObjectId('asdfasdf1312'

因此,我正在使用
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\u id数组中,我指定了所有对象id,如
mongoose.mongo.ObjectId('id here')
。但它没有更新任何东西。这是结果

{ ok: 1, nModified: 0, n: 1 }
这里有什么问题?这是因为版本吗?我的
mongoose
版本是
2.15.8


请帮帮我!谢谢大家!

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

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

阅读此内容以将“我的”转换为“我的”对象

您确定已定义了
req.query.\u id
?此外,没有猫鼬版本2.15.8。是的,它的定义。关于版本。当我在我的git npm mongoose-v上输入它时。2.15.8. 这将显示我不认为猫鼬或MongoDB有问题。您可以尝试打印
req.query.id
的值吗?我认为它之所以不更新它,是因为它没有具有该特定ID的记录。@JoshuaFabillar这是
npm
:D对于猫鼬版本,请使用
npm ls Mongoose
@JoshuaFabillar以确保:猫鼬将使用的集合称为
samples
。我之所以提到这一点,是因为人们不会第一次认为模型名称(
Sample
)也是所使用集合的名称。Mongoose会自动将字符串转换为ObjectId。不,它不会转换检查这个问题是否超过5年。Mongoose的当前版本将强制转换(这里是一个演示:),但您的示例已将其强制转换为StringExample将
ObjectId
转换为字符串,并将该字符串用作查询输入。猫鼬将自动将其转换回
ObjectId
。显示您不需要自己转换为
ObjectId