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你可能想把它作为你自己的答案,然后把它标记为正确的答案,这样就不会有其他人挖出来试图回答了。您甚至可能希望包含解决方案的代码示例,以防其他人来寻找相同的解决方案。