我有一个数据集,它的字段类型为字符串,但是随着项目的发展,我需要将其转换为模式类型,但是当我查询数据库时,我没有收到任何数据。但是,如果我从终端运行相同的查询(我们正在使用cloud9),它将返回所需的结果。我在做什么错了?
之前的数据集:
rId: { type: String }
之后的数据集:
rId: { type: Schema.Types.ObjectId, ref: 'Users' }
正在通话中执行代码:
var _id = req.body._id;
cars.find({rId: _id}, function (err, results) {
if(err) {
return res.status(400).send({msg:"error occurred"});
} else {
res.status(200).json(results);
}
});
我尝试了各种可能性(在其中),但没有一种起作用:
var _id = mongoose.Types.ObjectId.createFromHexString(req.body._id);
var _id = mongoose.Types.ObjectId(req.body._id);
由于某种原因,它不会找到先前创建的具有 rId 作为字符串类型的对象,而是通过终端查找所有对象。
答案 0 :(得分:0)
似乎您无法找到先前创建的对象,该对象具有rId作为字符串类型,但是您只能从终端将字符串转换为对象,这是您可以做的。这对我有用:
db.cars.find().forEach(function(x){ try{ var id = new ObjectId(x.rId);} catch(err){ var id = new ObjectId();} db.cars.save({rId: id}); });
这会将所有字符串类型转换为对象类型。 *需要try catch块,否则会出错; 错误:无效的对象ID:长度。
希望这对其他人有帮助。