Как мне найти объект по его ObjectId в консоли?

141

Я нашел ответ на этот вопрос для С# и Perl, но не в собственном интерфейсе. Я думал, что это сработает:

db.theColl.find( { _id: ObjectId("4ecbe7f9e8c1c9092c000027") } )

Запрос не дал никаких результатов. Я нашел 4ecbe7f9e8c1c9092c000027, выполнив db.theColl.find() и захватив ObjectId. В этой коллекции есть несколько тысяч объектов.

Я прочитал все страницы, которые я смог найти на веб-сайте mongodb.org, и не нашел их. Это просто странная вещь? Мне кажется, это нормально.

Теги:

9 ответов

214
Лучший ответ

Не странно, люди делают это все время. Убедитесь, что имя коллекции правильно (имеет значение) и что ObjectId является точным.

Документация здесь

> db.test.insert({x: 1})

> db.test.find()                                               // no criteria
{ "_id" : ObjectId("4ecc05e55dd98a436ddcc47c"), "x" : 1 }      

> db.test.find({"_id" : ObjectId("4ecc05e55dd98a436ddcc47c")}) // explicit
{ "_id" : ObjectId("4ecc05e55dd98a436ddcc47c"), "x" : 1 }

> db.test.find(ObjectId("4ecc05e55dd98a436ddcc47c"))           // shortcut
{ "_id" : ObjectId("4ecc05e55dd98a436ddcc47c"), "x" : 1 }
  • 1
    Странно, я перезапустил консоль, и она неожиданно заработала. Есть ли какой-то способ изменить свою «сферу» или что-то в командной строке и не знать об этом?
  • 0
    Неудивительно: когда я искал «найти ObjectID», эта страница не появлялась: mongodb.org/…
Показать ещё 5 комментариев
53

Еще проще, особенно при завершении табуляции:

db.test.find(ObjectId('4ecc05e55dd98a436ddcc47c'))

Edit: также работает с командой findOne для более красивого вывода.

  • 0
    если мы хотим искать с несколькими объектными идентификаторами так же, как мы реализуем условие WHERE IN в mysql.
  • 0
    Это дает мне ошибку: TypeError: фильтр должен быть экземпляром dict, bson.son.SON или другого типа, который наследуется от коллекций.
Показать ещё 3 комментария
36

Если вы используете Node.js:

> var ObjectId = require('mongodb').ObjectId; 
> var id = req.params.gonderi_id;       
> var o_id = new ObjectId(id);
> db.test.find({_id:o_id})

Изменить: исправлено для нового объекта ObjectId (id), а не нового ObjectID (id)

  • 0
    Это отлично сработало для меня, спасибо!
  • 0
    import { ObjectId } from "mongodb"; работает для любителя JS.
Показать ещё 1 комментарий
9

Вы пропустили вставить Double Quotes. Точный запрос

db.theColl.find( { "_id": ObjectId("4ecbe7f9e8c1c9092c000027") } )
  • 0
    «Проблема заключалась в том, что я не помещал цитаты вокруг своего _id». - 7 декабря 2011, см. Комментарии к первому ответу
  • 0
    @jcollum В качестве обновления заданный вами запрос будет действителен без кавычек вокруг _id.
3

Как только вы открыли CLI mongo, подключились и авторизировались в правой базе данных.

В следующем примере показано, как найти документ с помощью _id = 568c28fffc4be30d44d0398e из коллекции под названием "продукты":

db.products.find({"_id": ObjectId("568c28fffc4be30d44d0398e")})
2

У меня была эта проблема, и я делал то, что было задокументировано, и она все еще не работает.

Посмотрите на свое сообщение об ошибке и убедитесь, что у вас нет специальных символов, которые были скопированы. Я получал ошибку

SyntaxError: illegal character @(shell):1:43

Когда я подошел к персонажу 43, это было только начало моего идентификатора объекта после открытых кавычек, точно так же, как я вложил его. Я поместил туда курсор и ударил назад, ничего не случилось, когда он должен был удалить открытую цитаты. Я снова ударил назад, и он удалил открытую цитату, затем я вернул цитату и выполнил запрос, и он работал, несмотря на то, что он выглядел точно таким же.

Я занимался разработкой в ​​WebMatrix и копировал идентификатор объекта с консоли. Всякий раз, когда вы копируете с консоли в WebMatrix, вы, вероятно, заберете некоторые невидимые символы, которые вызовут ошибки.

0

Чтобы использовать метод Objectid, его не нужно импортировать. Он уже находится на объекте mongodb.

var ObjectId = new db.ObjectId('58c85d1b7932a14c7a0a320d');
db.yourCollection.findOne({ _id: ObjectId }, function (err, info) {
   console.log(info)
});
               
  • 1
    Нет: TypeError: db.ObjectId is not a function
  • 0
    Это просто ObjectId("SOMETHING")
0

Думаю, вам лучше написать что-то вроде этого:

db.getCollection('Blog').find({"_id":ObjectId("58f6724e97990e9de4f17c23")})
  • 0
    Можете ли вы объяснить, как этот код отвечает на вопрос?
-2

Просто выполните:

db.getCollection('test').find('4ecbe7f9e8c1c9092c000027');
  • 0
    Это не работает для меня из Mongo Shell версии 3.2.7.
  • 1
    Это будет соответствовать только _id, который является строкой; если это истинный ObjectId, вам нужно искать с использованием синтаксиса ObjectId.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню