正如标题所述,我试图访问嵌套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
name
和BsonDocument
的值创建新对象
(注意:这是在提供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
字段?
答案 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());
}
}
}
}