从嵌套文档中获取一个键

本文关键字:一个 嵌套 文档 获取 | 更新日期: 2023-09-27 18:12:19

我有一个像这样的文档。

{ "_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"}

我想做的是得到skillID并将其存储在一个变量中,以便与我自己的数组进行比较我的代码是这样的

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。我现在该怎么办?

从嵌套文档中获取一个键

从它的外观来看,您的文档项skillData是一个子文档数组,每个子文档包含skillIDlevel的值。你需要进一步解析它们。我不太熟悉mongodb,但我的猜测是,你需要尝试引用skillData[j]["skillID"]而不是skillData[j]或将skillData的每个元素解释为新的BsonDocument

看来我的问题是通过使用这样的代码来解决的

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++;
    }
}

这。