Intereting Posts
Facebook PHP SDK $ facebook-> getSignedRequest () Получить идентификатор пользователя и имя. (Вкладка страницы) MySQL – получение таблицы HTML из базы данных – обратная косая черта перед символом котировки PHP Неустранимая ошибка: вызов неопределенной функции json_decode () Невозможно экспортировать xlsx или xls в правильном формате, все данные смешаны Получение данных во время цикла с использованием левого соединения Загрузка нестандартных xml-данных wsman в объект с php Сбор значений столбцов в массив migs (MasterCard Virtual Payment Client) интеграция php Parse iTunes RSS Atom с PHP? Использование магических констант из другой области Как я могу заставить php возвратить 500, столкнувшись с фатальным исключением? События на PHP. Является ли это возможным? RackSpace Cloud Strips $ _SESSION, если у URL есть определенные расширения файлов Библиотеки / модели / лёгкие загрузки CodeIgniter Ресурс php mysql_connect всегда одинаковый

mongodb get _id как строка в поиске запроса

Здесь я создал коллекцию с одним документом

db.getCollection('example').insert({"example":1}); 

Я попытался использовать Projection, и я возвращаю _id.

 db.getCollection('example').find({"example":1},{"_id":1}); { "_id" : ObjectId("562a6300bbc948a4315f3abc") } 

Тем не менее, мне нужен приведенный ниже результат, как показано ниже.

  1. id, а не _id
  2. ObjectId ("562a6300bbc948a4315f3abc") против "562a6300bbc948a4315f3abc"

    { "id" : "562a6300bbc948a4315f3abc" }

Хотя я могу обрабатывать # 1 и # 2 на моем сервере приложений (на основе PHP), чтобы получить желаемый вывод, я смотрю, есть ли способ получить ожидаемый результат при запросе от самого монго

Solutions Collecting From Web of "mongodb get _id как строка в поиске запроса"

Вам нужно использовать метод .aggregate() .

 db.getCollection('example').aggregate([ { "$project": { "_id": 0, "id": "$_id" } } ]); 

Который дает:

 { "id" : ObjectId("562a67745488a8d831ce2e35") } 

или используя свойство .str .

 db.getCollection('example').find({"example":1},{"_id":1}).map(function(doc) { return {'id': doc._id.str } }) 

Что возвращает:

 [ { "id" : "562a67745488a8d831ce2e35" } ] 

Хорошо, если вы используете драйвер PHP, вы можете сделать что-то вроде этого:

 $connection = new MongoClient(); $db = $connection->test; $col = $db->example; $cursor = $col->find([], ["_id" => 1]); foreach($cursor as $doc) { print_r(array("id" => $doc["_id"])); } 

Который дает:

 Array ( [id] => MongoId Object ( [$id] => 562a6c60f850734c0c8b4567 ) ) 

Или снова используйте метод MongoCollection::aggregate .

 $result = $col->aggregate(array(["$project" => ["id" => "$_id", "_id" => 0]])) 

Затем, используя цикл foreach :

 Array ( [_id] => MongoId Object ( [$id] => 562a6c60f850734c0c8b4567 ) ) 

Одним из простых решений для перемещения MongoCursor на стороне PHP является использование генераторов, а также foreach или array_map($function, iterator_to_array($cursor)) . Пример:

 function map_traversable(callable $mapper, \Traversable $iterator) { foreach($iterator as $val) { yield $mapper($val); } } 

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

Таким образом, теперь вы можете использовать / повторно использовать его (или аналогичную реализацию) для любого предложения «спроектировать» ваши данные на стороне PHP с любым количеством сопоставлений (как и в случае с конвейером в aggregate ), но с меньшим количеством итераций. И это решение довольно удобно для ООП в случае повторного использования ваших функций map .

UPD: как раз для вашего примера ниже:

 $cursor = $db->getCollection('example')->find(["example":1],["_id":1]); $mapper = function($record) { return array('id' => (string) $record['_id']); //see \MongoId::__toString() } $traversableWithIdAsStringApplied = map_traversable($mapper, $cursor); //... 

теперь вы можете продолжить с большим количеством сопоставлений, применяемых к $ traversableWithIdAsStringApplied, или использовать только iterator_to_array для простого извлечения массива.