2017-02-04 8 views
14

以下のようなドキュメントを含むコレクションでは、特定のフィールド(例: lev3_field2(下記の文書内)が存在します。親フィールドがわからない場合は、ネストされたドキュメントのフィールドを持つレコードを検索します。

私は以下を試しましたが、結果は返されませんが、フィールドlev3_field2がいくつかのドキュメントにあります。アップデート1

db.getCollection('some_collection').find({"lev3_field2": { $exists: true, $ne: null } })

{ 
    "_id" : ObjectId("5884de15bebf420cf8bb2857"), 
    "lev1_field1" : "139521721", 
    "lev1_field2" : "276183", 
    "lev1_field3" : { 
     "lev2_field1" : "4", 
     "lev2_field2" : { 
      "lev3_field1" : "1", 
      "lev3_field2" : { 
       "lev4_field1" : "1", 
       "lev4_field2" : "1" 
      }, 
      "lev3_field3" : "5" 
     }, 
     "lev2_field3" : { 
      "lev3_field3" : "0", 
      "lev3_field4" : "0" 
     } 
    } 
} 

:これは一例であり、しかし実際の文書では、親フィールドが探すためにフィールドにあるか知られていません。したがって、lev3_field2の代わりに、私は `levM_fieldN 'を探しています。

update2:スピードは私の主な関心事ではありません。主な機能は、基準が満たされたドキュメントを見つけてドキュメントが見つかると、スキーマ親キーを含めることで、パフォーマンスのためにクエリを書き直すことができます。

+0

フィールドがどこに入れられているかわからずにフィールドを含むドキュメントを検索するには、(a)再帰的なjavascript式が必要であり、非常に遅くなります。私は、照会の容易さを念頭に置いて代替スキーマを使用することをお勧めします。 – Lex

+0

@ RyanBach - 私のためにmongodbを探索する理由は、そのスキーマが少ないためです。この特定のケースでは、私はスピードについてあまり心配していません。 – user3206440

答えて

関連する問題