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
。