2017-01-10 64 views
0

基本上这是我的代码,我遇到了麻烦。对mongoDB非常陌生,并且很想了解如何从JSON字符串中获取值,该JSON字符串是变量'line'中的返回值。变量故障提取值

public string get_data() 
     { 
      var client = new MongoClient(); 
      var db = client.GetDatabase("test"); 
      var collection = db.GetCollection<BsonDocument>("metacorp"); 
      var cursor = collection.Find("{'movie_name' : 'Hemin'}").ToCursor(); 
      var line = ""; 
      foreach (var document in cursor.ToEnumerable()) 
      { 
       using (var stringWriter = new StringWriter()) 
       using (var jsonWriter = new JsonWriter(stringWriter)) 
       { 
        var context = BsonSerializationContext.CreateRoot(jsonWriter); 
        collection.DocumentSerializer.Serialize(context, document); 
        line = stringWriter.ToString(); 

       } 
      } 
      var js = new JavaScriptSerializer(); 
      var d = js.Deserialize<dynamic>(line); 
      var a = d["movie_name"]; 
      return line; 
     } 

这是输出我得到,如果我回到行:

{ “_id”:物件( “58746dcafead398e4d7233f5”), “MOVIE_NAME”: “民” }

我希望能够将'Hemin'值提取为'a'。

+0

看来你已经例如获取* MOVIE_NAME *。这不正常吗? –

+0

@ botond.botos,是的。我想能够将值存储在变量“a”中。 –

+0

您是否有相应的c#类(例如MetaCorp)等。如果您可以搭载类型系统和Linq,则它使所有查询变得更容易。否则,你的代码会被魔法字符串臃肿。 – SJFJ

回答

1

我知道这不是你要求的,但因为你使用的是C#驱动程序,所以我会推荐以下内容。假设你有一个对应于metacorp集合的c#类,或者至少有一个处理它的序列化程序。希望能帮助到你。

var client = new MongoClient(); 
var db = client.GetDatabase("test"); 
var collection = db.GetCollection<MetaCorp>("metacorp"); 
var m = collection.SingleOrDefault(x => x.Movie_Name == "Hemin"); // Assuming 0 or 1 with that name. Use Where otherwise 
var movieName = "Not found"; 
if(m!= null) 
    movieName = m.Movie_Name; 
1

你可以为你的电影类DTO ANS刚刚从集合获取数据:

public class Movie 
{ 
    public ObjectId Id { get; set; } 
    public string movie_name { get; set;} 
} 

...

var client = new MongoClient(); 
var db = client.GetDatabase("test"); 
var collection = db.GetCollection<BsonDocument>("metacorp"); 

var movies = collection.Find(x=>x.movie_name == "Hemin").ToEnumerable();