将数据集字段从字符串类型转换为架构,但现在我不再得到任何结果



我有一个数据集,它有一个字符串类型的字段,但随着项目的发展,我需要将其转换为模式类型,但是当我查询数据库时,我没有收到任何数据。但是,如果我从终端运行相同的查询(我们使用 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 作为字符串类型,而是通过终端找到所有对象。

似乎您找不到以前创建的将 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}); });

这会将所有字符串类型转换为对象类型。 *需要尝试捕获块,否则会出错;错误:对象 ID 无效:长度

希望这对其他人有所帮助。

最新更新