0

我有一份像这样的文件。

{ "_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文件中的。我现在该怎么办?

4

2 回答 2

1

从外观上看,您的文档项skillData是一个子文档数组,每个子文档都包含skillID和的值level。所以你需要进一步解析这些。我对 mongodb 并不太熟悉,但我的猜测是您需要尝试引用skillData[j]["skillID"]而不是尝试skillData[j]将每个元素解释skillData为新的BsonDocument

于 2013-05-07T04:14:30.583 回答
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++;
    }
}

就这样。

于 2013-05-10T04:54:32.293 回答