Nodejs中对于mongodb自动生成的_id如何查询?
Nodejs中对于mongodb自动生成的_id如何查询?
利用mongo0se取得是null, User.findOne({_id:id},function(err,doc){…
Node.js 中对于 MongoDB 自动生成的 _id
如何查询?
在使用 Node.js 和 MongoDB 进行开发时,我们经常需要查询数据库中的文档。MongoDB 自动为每个文档生成一个唯一的 _id
字段,这个字段通常是一个 ObjectId。如果你想要根据这个自动生成的 _id
来查询某个文档,可以使用 Mongoose 或原生 MongoDB 驱动。
示例代码
假设你已经有一个使用 Mongoose 定义的 User
模型,并且想要通过 _id
查询用户信息。以下是一个简单的示例:
const mongoose = require('mongoose');
const Schema = mongoose.Schema;
// 定义 User 模型
const userSchema = new Schema({
name: String,
email: String
});
const User = mongoose.model('User', userSchema);
// 连接 MongoDB 数据库
mongoose.connect('mongodb://localhost:27017/mydatabase', { useNewUrlParser: true, useUnifiedTopology: true });
// 查询特定用户的函数
async function findUserById(id) {
try {
const user = await User.findById(id);
if (user) {
console.log('User found:', user);
} else {
console.log('No user found with the specified _id');
}
} catch (err) {
console.error('Error occurred while querying user:', err);
}
}
// 调用查询函数
findUserById('653b8f9e2c1d4e5a2b7c8f90'); // 替换为你想要查询的 _id
解释
-
连接 MongoDB:
- 使用
mongoose.connect()
方法连接到 MongoDB 数据库。 useNewUrlParser
和useUnifiedTopology
是为了确保与 MongoDB 的连接更加安全和高效。
- 使用
-
定义模型:
- 使用
mongoose.Schema
定义User
模型。 User
模型包含了两个字段:name
和email
。
- 使用
-
查询函数:
findUserById
函数接收一个_id
参数。- 使用
User.findById(id)
方法查询具有指定_id
的用户。 - 如果找到用户,则打印用户信息;否则,打印提示信息。
- 捕获并处理可能发生的错误。
通过这种方式,你可以轻松地查询 MongoDB 中自动生成的 _id
对应的文档。
var ObjectID = require(‘mongodb’).ObjectID; User.findOne({_id:ObjectID(id)},function(err,doc){…
我没有用mongoose,我用的是原生的mongodb api,id需要用ObjectID封装一下,mongoose应该有api直接传字符串的id
你确定查询的时候id不是空的吗,或者数据库中就没有这条记录
mongoose 中 schema 定义的mongoose.Schema.Type 是 ObjectID吗
是不是数据表名不一样导致无数据?什么条件都不传能查到吗
> db.Users.find({"_id":ObjectId("54fd4c7102886ede83e02d28")})
{ "_id" : ObjectId("54fd4c7102886ede83e02d28"), "name" : "foo" }
今天也遇到同样的问题,MongoDB更新的时候,用自己定义一个deviceid作为主键来操作,发现不对,看来不能有两个主键。另外想吐超,Mongo里面的id好长啊,如何自定义为类型
Node.js 中对于 MongoDB 自动生成的 _id
如何查询?
在 Node.js 中使用 Mongoose 查询 MongoDB 自动为文档生成的 _id
是一个常见的需求。通常情况下,_id
是一个 ObjectId 类型的字段。如果你直接通过字符串形式的 _id
进行查询,可能会遇到问题。
以下是一个示例代码,展示了如何正确地查询 _id
:
const mongoose = require('mongoose');
const Schema = mongoose.Schema;
// 定义一个简单的用户模型
const userSchema = new Schema({
name: String,
email: String
});
const User = mongoose.model('User', userSchema);
// 连接到 MongoDB 数据库
mongoose.connect('mongodb://localhost:27017/mydatabase', { useNewUrlParser: true, useUnifiedTopology: true });
// 示例 ID
const id = '653c8c98d6f1b9e0a70f924c';
// 使用 Mongoose 查询用户
User.findOne({ _id: mongoose.Types.ObjectId(id) }, (err, doc) => {
if (err) {
console.error('查询失败:', err);
return;
}
if (!doc) {
console.log('没有找到匹配的用户');
} else {
console.log('找到的用户:', doc);
}
});
解释
- 导入 Mongoose:首先需要导入 Mongoose 库。
- 定义 Schema 和 Model:定义一个简单的用户模式,并创建一个对应的 Mongoose 模型。
- 连接到 MongoDB:使用
mongoose.connect()
方法连接到 MongoDB 数据库。 - 查询用户:使用
findOne()
方法查询指定的_id
。注意,传入的_id
需要使用mongoose.Types.ObjectId()
进行转换,以确保其类型与数据库中的_id
类型一致。
如果直接使用字符串形式的 _id
(例如 '653c8c98d6f1b9e0a70f924c'
),Mongoose 无法正确识别其类型,因此查询可能返回 null
。将字符串形式的 _id
转换为 ObjectId
类型可以解决这个问题。