Как найти объект mongoDB по ObjectID с MongoDB Shell? - PullRequest
1 голос
/ 18 апреля 2019

Как я могу сделать это в оболочке MongoDB?

https://stackoverflow.com/a/14315888/8887398

Обычно я пытаюсь найти объекты по их ObjectId. Все не удается, поэтому я предполагаю, что он пытается сравнить со строкой. Я делаю это прямо в оболочке MongoDB. Вот что я попробовал:

db.myTestDB.find( {_id: 3254ummx213u5k815mn2v2 })
Результат: SyntaxError: идентификатор начинается сразу после числового литерала

db.myTestDB.find( {_id: "3254ummx213u5k815mn2v2" })
Результат: ничего

db.myTestDB.find( { "_id": "3254ummx213u5k815mn2v2" })
Результат: ничего

db.myTestDB.find( {_id: ObjectId("3254ummx213u5k815mn2v2") })
Результат: ничего

Я просто поместил туда случайный идентификатор для моих примеров, но я убедился, что идентификатор существует, и, посмотрев на MongoDB Compass.

1 Ответ

0 голосов
/ 18 апреля 2019

Из документов вы создаете ObjectId с помощью ключевого слова new. Например:

db.myTestDB.find( {_id: new ObjectId("3254ummx213u5k815mn2v2") })

Итак, вы были на правильном пути с последней попытки вашего вопроса, вы пропустили только ключевое слово new.

Вот более полный пример. Учитывая следующие документы:

db.getCollection('X').find({})

{
    "_id" : ObjectId("59d0ada3c26584cd8b79fc51"),
    "name" : "A"
}
{
    "_id" : ObjectId("59d0adafc26584cd8b79fc54"),
    "name" : "B"
}
{
    "_id" : ObjectId("59d0b2b4c26584cd8b79fd7c"),
    "name" : "C"
}

Эта команда оболочки загрузит один из этих документов по id:

db.getCollection('X').find({_id: new ObjectId("59d0ada3c26584cd8b79fc51")})

{
    "_id" : ObjectId("59d0ada3c26584cd8b79fc51"),
    "name" : "A"
}
...