My case is the following: I have a document with a document array inside it representing applications that user joined (as shown in Figure).

I need retrieve just one document by user according application name… I wrote the following code and it works… But it retrieves all applications. How to do that return just one?
public Application GetUserApplication(string username)
{
var query = Query.And(Query.EQ("UserName", username), Query.ElemMatch("Applications",
Query.EQ("Key", this.applicationKey)));
MongoCursor<BsonDocument> cursor = this.users.FindAs<BsonDocument>(query);
cursor.SetFields(new string[]{ "Applications" });
cursor.SetLimit(1);
var it = cursor.GetEnumerator();
var apps = it.MoveNext() ? it.Current["Applications"].AsBsonArray : null;
...
}
You need to add the
$positional operator to yourSetFieldsprojection to identify the index of the matched element:BTW, you can use the less cluttered syntax of: