在MongoDB中连接结果的最佳方法是什么?特别是PHP驱动程序?我需要使用mapReduce吗?
在mySQL中,我会这样做:SELECT CONCAT(fname,'',lname)作为名称FROM用户,但我似乎无法在mongo中找到一种简单的方法。
答案 0 :(得分:4)
我建议您在应用程序中执行此操作。使用PHP的串联功能向用户对象/数组添加“fullname”属性/键。除非你需要做一些数据库端处理或在返回结果之前选择,否则我会远离map / reduce / finalize。 (在此之前,也可以查看where
个查询 - http://www.mongodb.org/display/DOCS/Advanced+Queries。)
如果这是一次性查询并且你在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" ] } } }
]
)