我有一个名为Record
的文档,其中包含Athlete
作为嵌套文档。结构在JSON中看起来像这样:
{
"Id": "000000000000000000000000",
"Description": "sample string 1",
"Athlete": {
"Id": "123456789101112131415161",
"Name": "sample string 2",
"Username": "sample string 3",
...
},
...
}
如何根据Record
查询此结构以检索Athlete.Id
对象? I.E.如果我有运动员的身份证而且我想找回他们的记录,你会怎么做?
答案 0 :(得分:4)
方式1 :使用原始BsonDocument :(它将返回BsonDocument
列表)
var queryString = Query.EQ("Athlete.Id", "123456789101112131415161");
var resultBsons = collection.Find(queryString).ToList();
方式2 :另一种方法是使用mongodb c#driver的Typed版本:
定义2个类:
public class Athlete
{
public string Id { get; set; }
public string Name { get; set; }
public string Username { get; set; }
}
public class Record
{
public string Id { get; set; }
public string Description { get; set; }
public Athlete Athlete { get; set; }
}
然后进行查询
var url = new MongoUrl("mongodb://localhost");
var client = new MongoClient(url);
var server = client.GetServer();
var database = server.GetDatabase("test");
var collection = database.GetCollection<Record>("records");
var query = Query<Record>.EQ(i => i.Athlete.Id, "123456789101112131415161");
var result = collection.Find(query).ToList();
答案 1 :(得分:2)
除了已经说过的内容之外,这个blog可以帮助您处理更复杂的情况。基本上它可能看起来像:
records.Find(
Query.ElemMatch("Athlete",
Query.EQ("Id", athleteId)
));
答案 2 :(得分:1)
您可以使用您提供的格式通过子文档字段进行查询:Athlete.Id
。
db.collection_name.findOne({"Athlete.Id": "123456789101112131415161"})
编辑:要在C#中执行此操作,假设您在名为Record
的类中定义了Record文档的结构,则可以执行此类操作:
IMongoQuery query = Query.EQ("Athlete.Id", "123456789101112131415161");
Record result = collection_name.FindOne(query);
或者,如果可以使用匹配的Id返回多个文档:
IMongoQuery query = Query.EQ("Athlete.Id", "123456789101112131415161");
MongoCursor<Record> resultCursor = collection_name.FindOne(query);