问题 mongodb相当于SELECT字段AS`aldamename`


什么是MySQL查询的mongodb等价物

SELECT username AS  `consname` FROM  `consumer`

9638
2017-11-13 14:01


起源

聚合框架$ proejct是唯一的方法 - Sammaye
最好只使用您正在使用的任何客户端/驱动程序来修复数据。有些人可以将此作为驱动程序的一项功能。 - WiredPrairie
db.consumer.find().toArray().map(function (doc) { doc.consname=doc.username; delete doc.username; return doc; }); - hgoebl
@hgoebl:find()返回一个集合,并且没有toArray方法(至少在Meteors mongodb版本2中)。但你可以在集合上做一个forEach。 - westor
@westor可能我错了或者 toArray() 仅在mongo shell或旧版本的本机驱动程序中。谢谢你的暗示! - hgoebl


答案:


正如sammaye所提到的,你必须使用 $项目 在 聚合框架 重命名字段。

所以在你的情况下它将是:

db.consumer.aggregate([
    { "$project": {
        "_id": 0,
        "consname": "$username"
    }}
])

很酷的是,在2.6.x版本中,聚合返回一个游标,这意味着它的行为类似于find。

你也可以看看 $重命名 运算符永久更改架构。


9
2018-05-21 21:51





Salvador Dali的答案很好,但在3.0之前的流星版本中没有。 我目前正在尝试meteor,他们在mongodb中的版本是在版本2中。 我解决这个问题的方式是这样的:

var result = []:
db.consumer.forEach( function(doc) {
   result.push({
     consname:doc.username
   });
});

0
2017-10-09 07:03



但OP没有提到Meteor - Wahyu Kristianto