Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从嵌套文档中获取一个密钥_C#_Mongodb - Fatal编程技术网

C# 从嵌套文档中获取一个密钥

C# 从嵌套文档中获取一个密钥,c#,mongodb,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

我有一份像这样的文件

{ "_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++;
    }
}
foreach(行中的变量项)
{
var skillData=(BsonArray)项[“skillData”];//这是文档的数组
Console.WriteLine(skillData);
int i=0;
而(i<5)
{
对于(int j=0;j

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

从外观上看,您的文档项
skillData
是一个子文档数组,每个子文档都包含
skillID
级别的值。因此,您需要进一步解析这些。我对mongodb不太熟悉,但我的猜测是您需要尝试引用
skillData[j][“skillID”]
而不是
skillData[j]
,或者将
skillData
的每个元素解释为一个新的似乎我的问题是通过使用这样的代码解决的

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++;
    }
}
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++;
    }
}
foreach(行中的变量项)
{
var skillData=(BsonArray)项[“skillData”];//这是文档的数组
Console.WriteLine(skillData);
int i=0;
而(i<5)
{
对于(int j=0;j

仅此而已。

正如您在我的代码中看到的,它是否保存为
(BsonArray)
[“skillID”]
?实际上不,我看不出来。目前对
BsonArray
的唯一显式转换发生在
item[“skillData”]
之前,我找到了通过使用以下代码获得该值的方法,
var skillIDs=skillData[j].AsBsonDocument.GetValue(“skillID”).ToString()
谢谢你的回答…@Diom你可能想把它作为你自己的答案,然后把它标记为正确的答案,这样就不会有其他人挖出来试图回答了。您甚至可能希望包含解决方案的代码示例,以防其他人来寻找相同的解决方案。