2011-08-17 85 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