Mongoose findbyid()返回空

kcugc4gi  于 2022-10-04  发布在  Go
关注(0)|答案(7)|浏览(202)

我正在尝试通过ID在我的mongo数据库中查找记录

无论我使用findbyid(),finDone(id,...),它都返回空

这是我的代码。解决方案是什么?

const mongoose = require('mongoose');
mongoose.connect('mongodb://localhost/Movie', {useNewUrlParser: true})
.then(() => console.log('Connected to Databse'))
.catch(err => console.err('Could not connect to MongoDB', err));

var ObjectId = require('mongodb').ObjectID;

const Schema = new mongoose.Schema({
    name: String,
    author: String,
    tags: [String],
    date: Date, 
    isPublished: Boolean,
    price: Number
});

const Data = mongoose.model('Datas', Schema);

async function updateData(id){
const result = await Data.findById(id);
console.log(result);
}
updateData('5a6900fff467be65019a9001');
5sxhfpxr

5sxhfpxr1#

我也有同样的问题。我的DB集合中的_id是String。启用Mongoose调试require('mongoose').set('debug', true)后,我发现除非我们在模式中定义_id,否则Mongoose查询idObjectId("yourId")。为了解决这个问题,我不得不将_id:String添加到Mongoose模式中。

const MyDataSchema = new Schema({
  _id: String,
...
...
}
zdwk9cvp

zdwk9cvp2#

对此有一个简单的解决方案:

替换

const result = await Data.findById(id);

使用

const result = await Data.findById(id).exec();

有关exec()功能的说明,请参阅Mongoose - What does the exec function do?

5ssjco0h

5ssjco0h3#

检查您的MongoDB数据库,如果_id存储为字符串,则findById(id)找不到id。仅限FindById(id)finds ObjectId('yourId')。您可能会使用mongoimport导入数据库,并在JSON中包含_id,这是错误的,请删除导入的JSON中的_id

9rygscc1

9rygscc14#

我也面临着同样的问题。然后我引用了这个solution确保集合中的文档将**_id作为对象而不是字符串**。如果您已经使用JSON文件导入了数据库条目,只需删除所有_id字段,然后将其导入。

导入后,MongoDB会自己为所有条目赋值**_id**。

kyxcudwk

kyxcudwk5#

在搜索了一个小时之后,我需要将_id添加到模式中,如下所示:

_id: { type: Schema.Types.ObjectId },
zwghvu4y

zwghvu4y6#

在我的例子中,导入的文件使用_id列作为字符串,因此它会扰乱数据库,并且我无法使用该列进行过滤。

一旦我删除了集合,从数据文件中删除了_id列并重新导入它,_id过滤就开始正常工作。

whhtz7ly

whhtz7ly7#

我也有同样的问题。简单地用findOne方法代替了Mongoose的findByID方法。

FindOne语法-

findOne({id: id-of-user},function(err,foundUser){
console.log(foundUser);
});

相关问题