mongoDB объединяет результаты - PullRequest
4 голосов
/ 06 ноября 2010

Каков наилучший способ объединения результатов в MongoDB?В частности, драйвер PHP?Нужно ли использовать mapReduce?

В mySQL я бы сделал что-то вроде этого: SELECT CONCAT (fname, '', lname) в качестве имени FROM пользователей, но я не могу найти простой способ сделать этов монго.

Ответы [ 2 ]

4 голосов
/ 22 января 2016

Вы можете использовать агрегат, $ project и $ concat: https://docs.mongodb.org/v3.0/reference/operator/aggregation/project/ https://docs.mongodb.org/manual/reference/operator/aggregation/concat/

Это будет примерно так:

db.show_concat.aggregate(
   [
      { $project: { full_name: { $concat: [ "$fname", " - ", "$lname" ] } } }
   ]
)
4 голосов
/ 07 ноября 2010

В драйвере PHP

Я рекомендую сделать это в вашем приложении. Используйте функции конкатенации PHP для добавления атрибута / ключа «полное имя» к объекту / массиву пользователя. Я бы держался подальше от карты / уменьшения / завершения, если только вам не понадобится выполнять какую-либо обработку на стороне базы данных или выбирать перед возвратом результатов. (А до этого, может быть, рассмотрим также where запросов - http://www.mongodb.org/display/DOCS/Advanced+Queries.)

В доспехах

Если это разовый запрос и вы выполняете его в оболочке, есть два разных (но связанных) способа сделать это.

То, что вы используете, зависит от того, хотите ли только получить конкретное имя или если вы хотите, чтобы остальная часть документа сопровождала его. Например, если вам нужно только имя, вы можете сделать что-то вроде этого:

> db.show_concat.find().forEach( function (o) { print(o.fname + ' ' + o.lname); } )
john smith
jane doe

В противном случае, если вам нужны другие поля, вы можете сделать:

> db.show_concat.find().forEach( function (o) { o.full_name = o.fname + ' ' + o.lname; printjson(o); } )
{
        "_id" : ObjectId("4cd6dabb5391d08d405bb0bb"),
        "fname" : "john",
        "lname" : "smith",
        "full_name" : "john smith"
}
{
        "_id" : ObjectId("4cd6daee5391d08d405bb0bc"),
        "fname" : "jane",
        "lname" : "doe",
        "full_name" : "jane doe"
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...