2016-03-21 150 views
0

你好,我想查询我的数据库来获取对象。我遵循了一个指南,似乎每个人都只是在整个集合中使用一个foreach,这是它应该如何完成的?从mongodb c获取对象#

public void asd() 
     { 
      MongoClient _client = new MongoClient(); 
      IMongoDatabase _database = _client.GetDatabase("BlogDB"); 

      IMongoCollection<Blog> collection = _database.GetCollection<Blog>("Blog"); 

      var filter = new BsonDocument(); 
      var result = collection.Find(filter) 
       .Project(Blog => Blog.Posts) 
       .ToList(); 
      foreach (Posts post in result.FirstOrDefault()) 
      { 
       if (post.postid == postid) 
       { 
        //Do something with post E.g post.myfunction(); 
       } 
      } 
     } 

是否没有办法从查询中获取特定帖子?

我试图使用过滤器,但collection.Find(过滤器)仍然返回一个集合与我的整个bsondocument。

回答

0

您可以使用下面的代码

public Posts Get(int id) 
    { 
     var builder = Builders<Posts>.Filter; 

     var query = builder.Eq(x => x.postid, id); 
     return collection.Find(query).SingleOrDefaultAsync().Result; 
    } 
+0

如何从收集博客返回一个帖子? 如果我将我的收藏更改为 IMongoCollection collection = _database.GetCollection (“Blog”); 它编译,但我得到null作为参考.. – Jacob

0

如何简化代码点点。既然你需要一个匹配的文件,

更换

var result = collection.Find(filter) 
    .Project(Blog => Blog.Posts) 
    .ToList(); 
foreach (Posts post in result.FirstOrDefault()) 
{ 
    if (post.postid == postid) 
    { 
     //Do something with post E.g post.myfunction(); 
    } 
} 

随着

var post = collection.Find(filter) 
    .Project(Blog => Blog.Posts) 
    .Limit(1) 
    .FirstOrDefault();