0

Sup,互联网的好人。

有谁知道如何对 mongodb 进行嵌套查询?这可能最好用一个例子来解释。要检索特定字段,我可以使用 :fields 选项来检索该字段(例如,假设它被称为“useful_field”):

    collection.find({},{:fields => {"useful_field" => 1}})

但是假设有用字段本身包含许多其他字段的数组,即

    useful_field = [{"value_I_want"=>"useful","value_I_dont_want"=>"not_useful"}]

我的目标是选择“value_I_want”。有什么想法吗?

这是我正在尝试处理的特定条目(对推文的回复):

    { "_id" : ObjectId("51b6f71b0364718d71e4bca5"), 
    "annotations" : { }, 
    "resultType" : "Tweet", 
    "score" : 1, 
    "groupName" : "TweetsWithConversation",
    "results" : [
            {   
                "kind" : "Tweet",   
                "score" : 1,    
                "annotations" : {   "ConversationRole" : "Ancestor" },
              "value" : {   "created_at" : "Fri Jun 07 19:47:51 +0000 2013",    
                          "id" : NumberLong("343091955196104704"),  
                          "id_str" : "343091955196104704",  
                          "text" : "THIS_IS_WHAT_I_WANT",
                       etc. etc. (Apologies for the odd formatting)

我正在尝试使用一种可以让我执行以下操作的方法:

    db.collection.find({},{:fields { some_way_of_selecting(THIS_IS_WHAT_I_WANT)})

(我作为 ruby​​ 脚本的一部分进行查询)

否则,我将不得不回到正则表达式的黑暗世界。没有人想要那样。

4

2 回答 2

1

尝试以下

db.collection.find({},{"useful_field.value_I_want": 1})

也许试试这个:

db.collection.find({"resultType" : "Tweet"}, {"results" : {$elemMatch : {"value.text" : "THIS_IS_WHAT_I_WANT"}}})
于 2013-06-21T16:40:18.007 回答
0

您正在尝试做的事情称为“投影” - 它指定您希望在第二个参数中返回的字段find

在您的情况下,您只需要:

db.collection.find({}, {"results.value.text":1} ) 
于 2013-06-22T04:00:46.483 回答