mongoDB连接结果

时间:2010-11-05 23:12:13

标签: mongodb

在MongoDB中连接结果的最佳方法是什么?特别是PHP驱动程序?我需要使用mapReduce吗?

在mySQL中,我会这样做:SELECT CONCAT(fname,'',lname)作为名称FROM用户,但我似乎无法在mongo中找到一种简单的方法。

2 个答案:

答案 0 :(得分:4)

在PHP驱动程序

我建议您在应用程序中执行此操作。使用PHP的串联功能向用户对象/数组添加“fullname”属性/键。除非你需要做一些数据库端处理或在返回结果之前选择,否则我会远离map / reduce / finalize。 (在此之前,也可以查看where个查询 - http://www.mongodb.org/display/DOCS/Advanced+Queries。)

在Shell中

如果这是一次性查询并且你在shell中进行,那么有两种不同的(但相关的)方法可以解决这个问题。

如果想要连接的名称,或者您希望文档的其余部分与之一起使用,那么您使用的是哪一个。例如,如果您只想要名称,则可以执行以下操作:

> 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"
}

答案 1 :(得分:4)

您可以使用aggregate,$ 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" ] } } }
   ]
)