如何在BsonDocument中访问嵌套BsonArray中的第一个对象

时间:2016-06-20 13:26:39

标签: c# mongodb mongodb-query

正如标题所述,我试图访问嵌套BsonArray中的第一个对象。我是mongodb的新手,所以仍然试着绕过它。

无论如何,我想说我有以下数据:

{
"_id" : ObjectId("111111dasd1asdasd1asd1"),
"data" : [ 
    {
        "name":"John Smith",
        "push ups":20
    },
    {
        "name":"John Smith",
        "push ups":22
    },
    {
        "name":"John Smith",
        "push ups":25
    }
]
}

我尝试通过BsonDocument_id创建新的name,我在其中为查询提供了_id的参数,但我只是抓住任何内容在name中没有给它一个参数。

{
  "connect":ObjectId("111111dasd1asdasd1asd1", //assigning the value of id from the original document to this field
  "name":"John Smith"
}

由于我的mongo集合的结构使每个Bsondocument仅处理一个唯一name,因此我不想遍历原始文档的data BsonArray例。我只想访问name所拥有的任何值并继续前进。

以下是我当前的代码,试图从id

nameBsonDocument的值创建新对象

(注意:这是在提供id参数的方法中)。

 var query = Query.EQ("_id", id);
 var tempRecord = existing.FindOne(query);
 var record = new
     {
       name = tempRecord["data"]["name"],
       connect = id
     };
 result = record.ToBsonDocument();

 return result;

目前tempRecord正确存储从查询返回的数据,我通过它。但是,如何在name内正确访问data数组的tempRecord字段?

1 个答案:

答案 0 :(得分:0)

如果你想检索同一个_id的每个名字,这里是代码,如果你想稍微改一下,只需发表评论:

首先,你应该改变你的_id值,它是无效的,例如:ObjectId(“56d18c7e5e4b3c416e7b408b”)

database =>测试| collection => MyCollection的

 MongoClient client = new MongoClient();
            var db = client.GetDatabase("test");
            var collection = db.GetCollection<BsonDocument>("myCollection");
            var filter1 = Builders<BsonDocument>.Filter.Eq("_id", new ObjectId("56d18c7e5e4b3c416e7b408b"));
            using (var cursor = await collection.FindAsync(filter1))
            {
                while (await cursor.MoveNextAsync())
                {
                    var batch = cursor.Current;
                    foreach (var document in batch)
                    {
                        int subDocMax = document[1].AsBsonArray.Count;
                        for(int i=0;i<subDocMax;i++)
                        {
                            MessageBox.Show("Name :"+document[1][i][0].ToString());
                        }
                    }
                }
            }