Подтвердить что ты не робот

Правильный способ поиска записей MongoDB с помощью '_id' в Node

Я использую MongoDb (как часть MongoJS) в Node. Вот документация для MongoJS.

Я пытаюсь выполнить вызов в Node на основе поля ввода _id. При использовании vanilla MongoDb с консоли я могу:

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

и он правильно возвращает мою запись. Однако, когда я делаю то же самое в Node, например:

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

Я получаю ReferenceError: ObjectId is not defined.

Каков правильный протокол для этого?

4b9b3361

Ответ 1

Перед использованием необходимо выполнить функцию ObjectId:

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

Ответ 2

Если вы используете MongoJS, вы можете сделать:

var ObjectId = mongojs.ObjectId;

Затем

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

Ответ 3

если вы используете мангуст, вы можете попробовать следующее:

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
});

Ответ 4

Вы также можете деструктурировать ваш ObjectId и MongoClient, чтобы оптимизировать ваш код и сделать его более читабельным.

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

Ответ 5

Вот еще один способ использовать objectId при использовании mongoose.

// 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)
    })
})