c# - How to perform search documents by items in subcollection -


i have such document structure:

{     "name" : "hello world",     "parameters" : [          {             "key" : 104,             "value" : 8         },          {             "key" : 112,             "value" : 20         },          {             "key" : 176,             "value" : 2         },          {             "key" : 179,             "value" : 1         },          {             "key" : 180,             "value" : 3         },          {             "key" : 177,             "value" : 1         },          {             "key" : 302,             "value" : 1         },          {             "key" : 303,             "value" : 0         },          {             "key" : 178,             "value" : 3         },          {             "key" : 181,             "value" : 2015         }     ]   } 

i need select objects parameter parameters collections aplliyed next conditions:

expression<func<superobject, bool>> newpred = x => x.parameters.any(     p => p.key == id      && p.value >= min      && p.value <= max ) 

i tried that:

db.superobjects.find({      parameters: {          $elemmatch: {              key: 104,              $and: [                 {value: { $gte: 8 }},                  {value: { $lte: 10 }}             ]          }      }  }) 

and works in mongodb. how write such code in c#?

i tried

filter = filter & builder.elemmatch("parameters", builder.eq("key", id) & builder.gte("value", min) & builder.lte("value", max)); 

it throws invalid cast exceptions because tried cast parameters object superobject...

as far can see, query not parameters satisfies condition whole document itself. intended? select set of subdocument must use group.

having said that, can create filter based on mongo query directly

bsondocument filter = mongodb.bson.serialization.bsonserializer.deserialize<bsondocument>("{ parameters: { $elemmatch: { key: 104, $and: [{value: { $gte: 8 }}, {value: { $lte: 10 }}] } } })")


Comments