如何使用字段选择返回包含Mongo shell的字段?

时间:2012-06-18 09:10:30

标签: mongodb

我将Tweets存储在MongoDB数据库中,并希望使用字段选择器(http://www.mongodb.org/display/DOCS/Querying#Querying-FieldSelection)仅返回用户的文本,日期和屏幕名称。

{ 
    "_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属性?

[UPDATE]

我之前尝试使用点符号并且它引发了一个异常,但是,根据下面的两个答案(我已经两个都为+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 个答案:

答案 0 :(得分:2)

您可以像在查询中一样使用dot notation

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

但是,该字段不会被展平,因此结果对象仍然具有user - 子文档:

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

但是,在代码中扁平化这应该不是一个大问题。

答案 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分钟发布的,所以先接受他的回答。