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

私がやりたいことは、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ます。私は今どうすればいい?

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 に答える