从嵌套文档中获取一个键
本文关键字:一个 嵌套 文档 获取 | 更新日期: 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
是一个子文档数组,每个子文档包含skillID
和level
的值。你需要进一步解析它们。我不太熟悉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++;
}
}
这。