搜索MongoDB条目的正确方法'_id'在节点中

Correct way to search for MongoDB entries by '_id' in Node

本文关键字:id 节点 方法 MongoDB 搜索      更新时间:2023-09-26

我在Node中使用MongoDb(作为MongoJS的一部分)。这是MongoJS的文档。

我正试图在Node中根据条目的_id字段进行调用。当从控制台使用香草MongoDB时,我可以做:

db.products.find({"_id":ObjectId("51d151c6b918a71d170000c7")})

并且它正确地返回了我的条目。然而,当我在Node中做同样的事情时,比如:

db.products.find({"_id": ObjectId("51d151c6b918a71d170000c7")}, function (err, record) {
    // Do stuff
});

我得到ReferenceError: ObjectId is not defined

进行此操作的正确协议是什么?

在使用ObjectId函数之前需要它:

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

如果您使用的是MongoJS,您可以执行以下操作:

var ObjectId = mongojs.ObjectId;

然后,

db.users.find({"_id": ObjectId(id)}, function(err, user){...}

如果你使用猫鼬,你可以试试这个:

var mongoose = require('mongoose')
usersSchema = mongoose.model('users'),
mongoose.Types.ObjectId("<object_id>")
usersSchema.find({"_id": mongoose.Types.ObjectId("<object_id>")}, function (err, record) {
// Do stuff
});

您还可以销毁ObjectId和MongoClient以优化代码并使其更具可读性。

const { MongoClient, ObjectId } = require('mongodb');

在使用猫鼬时,这里有另一种使用objectId的方法。

// at the top of the file
const Mongoose = require('mongoose')
const ObjectId = Mongoose.Types.ObjectId;
// when using mongo to collect data
Mongoose.model('users', userSchema).findOne({ _id: 
    ObjectId('xyz') }, function (err, user) {
        console.log(user)
        return handle(req, res)
    })
})