0

我将推文存储在 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 属性?

[更新]

我之前曾尝试使用点表示法,但它引发了异常,但是,根据下面的两个答案(我都有+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})
4

2 回答 2

2

您可以像在查询中一样使用点表示法:

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" } 
}

但是,在代码中将其展平应该不是什么大问题。

于 2012-06-18T09:57:20.220 回答
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" } }

这里有更多关于高级查询的信息。

更新:看起来我是在 mnemosyn 后 2 分钟发布的,所以请先接受他的回答。

于 2012-06-18T10:02:29.293 回答