12

私はこのようなコレクションにドキュメントを持っています.form_Id:1とFunction_Id:2のレコードを見つける必要があります.mongoクエリの書き方.

"Form_Id" : 1,
"Function" : [{
  "Function_Id" : 1,
  "Role" : [{
      "Role_Id" : 1,
      "UserId" : ["Admin", "001"]
    }]
}, {
  "Function_Id" : 2,
  "Role" : [{
      "Role_Id" : 2,
      "UserId" : ["Admin", "005"]
    }]
}]
4

2 に答える 2

24

これを行うには、ドット表記と$位置射影演算子を使用できます。

db.test.find({Form_Id: 1, 'Function.Function_Id': 2}, {_id: 0, 'Function.$': 1})

戻り値:

{"Function": [{"Function_Id": 2, "Role": [{"Role_Id": 2, "UserId": ["Admin", "005"]}]}]}
于 2013-02-26T15:18:54.863 に答える
6

ファンクション キーは配列であるため、$match 演算子を使用するには、まず $unwind 演算子を使用する必要があります。http://docs.mongodb.org/manual/reference/aggregation/unwind/ そして、 $match 演算子を使用して、必要なドキュメントを見つけますhttp://docs.mongodb.org/manual/reference/aggregation/match/

したがって、クエリは次のようになります

    db.collection.aggregate([{$unwind:"$Function"},{$match:{"Form_id":1,"Function.Function_id":2}}])

デフォルトでは、mongo はドキュメントの _id を表示します。したがって、_id を表示したくない場合は、関連する ID を照合した後、$project 演算子http://docs.mongodb.org/manual/reference/aggregation/project/を使用できます。

     db.collection.aggregate([{$unwind:"$Function"},{$match:{"Form_id":1,"Function.Function_id":2}},{$project:{"_id":0,"Form_id":1,"Function":1}}])

form_id を表示したくない場合は、クエリのプロジェクト部分で form_id を指定しないでください。デフォルトでは、mongo は値が 1 のキーのみを表示します。キーが言及されていない場合、表示されません。

    db.collection.aggregate([{$unwind:"$Function"},{$match:{"Form_id":1,"Function.Function_id":2}},{$project:{"_id":0,"Function":1}}])
于 2013-02-26T05:54:17.297 に答える