0

Sup、インターネットの善良な人々。

mongodb のネストされたクエリを作成する方法を知っている人はいますか? これは、おそらく例によって最もよく説明されています。特定のフィールドを取得するには、:fields オプションを使用してそのフィールドを取得できます (たとえば、「useful_field」と呼ばれているとします)。

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

しかし、usable_field 自体にさらに多くのフィールドの配列が含まれているとします。つまり、

    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

あなたがやろうとしていることは「射影」と呼ばれます.2番目の引数でどのフィールドを返すかを指定していますfind.

あなたの場合、あなたは単に欲しい:

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