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