从嵌套文档中获取一个键

时间:2013-05-07 03:20:05

标签: c# mongodb

我有一份这样的文件。

{ "_id": { "$oid" : "517e3fccc9c02d22c85f3a6f" }, 
"skillData": [ { "skillID": 3001, 
"level": 1 }, { "skillID": 3002, 
"level": 1 }, { "skillID": 1, 
"level": 1 }, { "skillID": 2, 
"level": 1 }, { "skillID": 3, 
"level": 1 } ], 
"username": "myID"}

我想要做的是获取技能ID并将其存储在变量上,以便与我自己的数组进行比较 我的代码是这样的

foreach (var item in rows)
{
    var skillData = (BsonArray)item["skillData"];//this is the array of the document

    Console.WriteLine(skillData);
    int i=0;
    while(i < 5)
    {
        for (int j = 0; j < skillData.Count; j++)
        {
            if (skillData[j] == equipTileArray[i])//this is where i want to compare
            {
                isSkillIDFound = true;
                break;
            }
        }
        i++;
    }
}

但是skillData[j]会将整个文档返回给我,而我只需要文档中的skillID。我现在该怎么办?

2 个答案:

答案 0 :(得分:1)

从外观上看,您的文档项skillData是一个子文档数组,每个子文档都包含skillIDlevel的值。所以你需要进一步解析那些。我对mongodb并不过分熟悉,但我猜你需要尝试引用skillData[j]["skillID"]而不是skillData[j],或者将skillData的每个元素解释为新的{{} 3}}

答案 1 :(得分:0)

似乎通过使用像这样的代码来解决我的问题

var skillIDs = skillData[j].AsBsonDocument.GetValue("skillID").ToString();

这里有一些使用我在这里发布的代码的例子:

foreach (var item in rows)
{
    var skillData = (BsonArray)item["skillData"];//this is the array of the document

    Console.WriteLine(skillData);
    int i=0;
    while(i < 5)
    {
        for (int j = 0; j < skillData.Count; j++)
        {
            var skillIDs = skillData[j].AsBsonDocument.GetValue("skillID").ToString();
            if (skillIDs == equipTileArray[i])
            {
                isSkillIDFound = true;
                break;
            }
        }
        i++;
    }
}

多数人。