如何从子文档数组中只检索一个特定元素?

时间:2013-02-08 20:45:48

标签: c# arrays mongodb projection

我的情况如下:我有一个文档,里面有一个文档数组,表示用户加入的应用程序(如图所示)。

Document Example

我需要用户根据应用程序名称检索一个文档...我编写了以下代码并且它可以工作......但它检索所有应用程序。该怎么做只返回一个?

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;

            ...
        }

1 个答案:

答案 0 :(得分:5)

您需要将$位置运算符添加到SetFields投影中,以识别匹配元素的索引:

cursor.SetFields(new string[]{ "Applications.$" });
顺便说一句,你可以使用较简洁的语法:

cursor.SetFields("Applications.$");