Как искать в MongoDB на php по _id?

Есть коллекция 'test' в монго
...
{ "_id" : NumberLong("6763623186861095307"), "first_name" : "Людмила"}
{ "_id" : 10991155627267640000, "first_name" : "Нина"}
{ "_id" : 12946078521768528000, "first_name" : "александр" }
{ "_id" : NumberLong("6755764668161210064"), "first_name" : "Alexandr" }
{ "_id" : 12681288148839543000, "first_name" : "Анатолий"}
...


Необходимо искать по _id.
Ищу на yii2 так
$query = new MongoQuery;
$id = "6763623186861095307";
$query->select(['_id', 'first_name'])
           ->from('test')
           ->where(['_id' => (int)$id])
           ->limit(1);
$result = $query->one();


Но $result == false.
Раньше этот код работал.
Как это сейчас сделать? Может быть без yii2, на чистом php?
  • Вопрос задан
  • 489 просмотров
Решения вопроса 1
kovalenko_jul_s
@kovalenko_jul_s Автор вопроса
В общем, по ходу дела при очередном обновлении драйвера mongo для php выскочил интересный баг.
По итогу работает конструкция
...
->where(['_id' => (int)$id])
->orWhere(['_id' => (float)$id])


Работает и с NumberLong, и с обычным Int.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@aayarushin
Ты передаешь _id как строку, монга принимает ObjectId
Здесь ниже пример есть как привести к objectId
И вот еще ссылка
И судя по коду монги у тебя в вопросе, ты сама добавляешь _id в объект? Когда создаешь в монге запись она сама проставляет _id каждому элементу в коллекции.
Записи в монге должны быть так
{ "_id" : ObjectId("6763623186861095307"), "first_name" : "Людмила"}
{ "_id" : ObjectId("10991155627267640000"), "first_name" : "Нина"}
{ "_id" : ObjectId("12946078521768528000"), "first_name" : "александр" }
{ "_id" : ObjectId("6755764668161210064"), "first_name" : "Alexandr" }
{ "_id" : ObjectId("12681288148839543000"), "first_name" : "Анатолий"}
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы