2011-08-17 45 views
4

什么是MongoDB的等同于该查询:MongoDB的查询中创建别名

从表名选择“富”,酒吧,id为“规范”

+0

这是你想要做的吗? http://stackoverflow.com/questions/14751835/how-to-get-modified-json-output-from-mongodb-node-js-mongoose/14752107#14752107 – Plato

回答

8

有可能创造新的与给定的名称和值从另一场$项目采取现场:

{ 
    "_id" : 1, 
    title: "abc123", 
    isbn: "0001122223334", 
    author: { last: "zzz", first: "aaa" }, 
    copies: 5 
} 

以下$项目阶段增加了新的领域ISBN,姓氏和copiesSold:

db.books.aggregate(
    [ 
     { 
     $project: { 
      title: 1, 
      isbn: { 
       prefix: { $substr: [ "$isbn", 0, 3 ] }, 
       group: { $substr: [ "$isbn", 3, 2 ] }, 
       publisher: { $substr: [ "$isbn", 5, 4 ] }, 
       title: { $substr: [ "$isbn", 9, 3 ] }, 
       checkDigit: { $substr: [ "$isbn", 12, 1] } 
      }, 
      lastName: "$author.last", 
      copiesSold: "$copies" 
     } 
     } 
    ] 
) 

http://docs.mongodb.org/manual/reference/operator/aggregation/project/#pipe._S_project

+0

我接受这个答案,因为项目阶段确实允许字段的“别名”。请参阅user1735921的答案,以获取如何投影而不用修改原始字段值 – Fatmuemoo

2

您可以使用像TOUPPER或TOLOWER或CONCAT或者你觉得其他任何运营商任何运营商一样,你认为你能正常工作并创建一个别名。

示例: 在以下示例中,created_time是集合中的字段。 (我不擅长语法,所以你可以纠正它,但这是方法)

{$project { 
"ALIAS_one" : {"$concat" : "$created_time"}, 
"ALIAS_two" : {"$concat" : "$created_time"}, 
"ALIAS_three" : {"$concat" : "$created_time"} 
}} 

因此,使用运营商在这时尚,您可以创建多达别名为你喜欢。

+1

有趣的示例。当这个问题被问到时,我不相信聚合管道已经回来了。我会指出,$ concat可以用于不操纵值 – Fatmuemoo

+0

yeah concat会更好,反正我只是举一个我想到的可能方式的例子...编辑我的帖子。虽然Andrey已经发布了MongoDB中已有的本地语法。它只是另一种可能的方式,有时在编写复杂查询时会派上用场。 – user1735921