2012-06-18 92 views
0

我將推文存儲在MongoDB數據庫中,並希望使用字段選擇器(http://www.mongodb.org/display/DOCS/Querying#Querying-FieldSelection)僅返回用戶的文本,日期和屏幕名稱。如何使用字段選擇來返回包含Mongo shell的字段?

{ 
    "_id" : NumberLong("213686009408"), 
    "text" : "RT @Milanello: Lightning over the Donb...", 
    "created_at" : "Fri, 15 Jun 2012 17:37:38 +0000", 
    "user" : { 
     "screen_name" : "xxxxx", 
     "profile_image_url" : "http://a0.twimg.com/pro[...].jpg" 
    } 
} 

創建返回只是文本和日期的查詢是很容易的:

> db.abc.find({},{created_at:1,text:1}) 

我不知道如何返回user.screen_name財產呢?

[更新]

我已經使用點符號以前嘗試,它拋出一個異常,然而,如下面兩個答案(我有+1兩者)點符號的工作,但只有當你在屬性名稱周圍使用「」。

所以,這不工作:

db.abc.find({},{created_at:1,text:1, user.screen_name:1}) 

但這:

db.abc.find({},{created_at:1,text:1, "user.screen_name":1}) 

回答

2

您可以使用dot notation,你在查詢會:

db.abc.find({},{created_at:1,text:1, "user.screen_name" : 1}) 

然而,字段不會變平,所以結果對象仍然有一個user -subdocument:

{ "_id" : NumberLong("4546545"), 
    "created_at" : "Fri, 15 Jun...", 
    "user" : { "screen_name" : "John Doe" } 
} 

但是,在代碼中展開這個應該不是一個大問題。

+0

謝謝 - 我曾經使用過: > db.abc.find({},{created_at:1,text:1,user.screen_name:1}) –

2

您需要使用點符號來查詢數組中的值。我創建了一個類似的文件,修改了_id領域,併成功運行下面的查詢 -

> db.abc.find({},{'user.screen_name': 1}) 
{ "_id" : 1200, "user" : { "screen_name" : "xxxxx" } } 

> db.abc.find({'user.screen_name': "xxxxx"}) 
{ "_id" : 1200, "text" : "RT @Milanello: Lightning over the Donb...", "created_at" : "Fri, 15 Jun 2012 17:37:38 +0000", "user" : { "screen_name" : "xxxxx", "profile_image_url" : "http://a0.twimg.com/pro[...].jpg" } } 

有先進的查詢here更多資料。

更新:看起來我是在mnemosyn發佈2分鐘後發佈的,因此先接受他的回答。

相關問題