将数据集字段从类型字符串转换为架构,但是现在我没有任何结果

时间:2019-03-21 23:26:55

标签: mongodb mongoose

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

1 个答案:

答案 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:长度

希望这对其他人有帮助。