3

私は文書を持っています -

  {"_id" : ObjectId("51385d2308d427ce306f0100"),
  "aid" : "1",
  "studyId" : "study-1",
  "mediaType" : "microBlog",
  "text" : "bla bla",
  "sentences" : "bla bla",
  "status" : {
          "algo1" : "required",
          "algo2" : "required",
          "algo3" : "completed",
          "algo4" : "completed"
  },
  "priority" : "u"}

ステータス フィールドには、ステータス値が異なる複数のサブフィールドがあります。ステータス サブフィールドのいずれかの値が「必須」であるすべてのドキュメントを返すようなクエリを作成することは可能ですか?

db.foo.find({status : "required"})サブフィールドのいずれかに値が「必須」であるすべてのドキュメントを私に与えるようなもの

4

3 に答える 3

5

別のより効率的なアプローチは、次のように、「ステータス」サブドキュメントを「型指定された値」の配列として実装することです。

 {"_id" : ObjectId("51385d2308d427ce306f0100"),
  "aid" : "1",
  "studyId" : "study-1",
  "mediaType" : "microBlog",
  "text" : "bla bla",
  "sentences" : "bla bla",
  "status" : [
          { type: "algo1", value: "required" },
          { type: "algo2", value: "required" },
          { type: "algo3", value: "completed" },
          { type: "algo4", value: "completed" }
  ],
  "priority" : "u"}

これにより、次のクエリを使用して、サブフィールドのいずれかに値が「必須」であるすべてのドキュメントを見つけることができます。

db.foo.find({"status.value":"required"})

このサブフィールドにインデックスを定義すると、クエリが高速化されます。

db.foo.ensureIndex({"status.value":1})
于 2013-04-04T04:51:15.850 に答える
0

db.foo.find({ 'status.algo1' : 'required' })またはで検索できますdb.foo.find({ 'status.algo2' : 'required' })が、おそらく regexkeysでフィルタリングすることはできません。次の投稿も参照してください: https://stackoverflow.com/a/7290728/654952

于 2013-03-07T11:09:56.903 に答える