【问题标题】:How to access the first object within a nested BsonArray within a BsonDocument如何访问 BsonDocument 中嵌套 BsonArray 中的第一个对象
【发布时间】:2016-06-20 13:26:38
【问题描述】:

正如标题所述,我正在尝试访问嵌套BsonArray 中的第一个对象。我是 mongodb 的新手,所以仍在尝试解决它。​​

无论如何,假设我有以下数据:

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

我正在尝试通过获取_idname 来创建一个新的BsonDocument,在其中我为查询提供了_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 拥有的任何值并继续前进。

这是我当前的代码,试图从BsonDocument 中的idname 的值创建一个新对象

(注意:这是在提供 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 正在正确存储从我传递的查询返回的数据。但是,如何正确访问 tempRecorddata 数组的 name 字段?

【问题讨论】:

标签: c# mongodb mongodb-query


【解决方案1】:

如果你想检索同一个_id的每个名字,这里是代码,如果你想稍微改变一下,请留言:

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

数据库 => 测试 |收藏 => 我的收藏

 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());
                        }
                    }
                }
            }

【讨论】:

  • 我的数据不是真实的,只是为了举例。
  • 你能澄清更多吗,拜托。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-09
  • 2016-03-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多