2016-09-08 9 views
-2

"コード"タイプのフィールドでjavascript関数を実行し、内部のチェックデータに文字列としてguidが含まれています。フィルタを使用してください。MongoDbのどこにC#ドライバの新しいバージョンがありますか?

作品MongoDBのクエリはこれです:

db.getCollection('BackgroundTasks').find({ Status: 1, $where: function() { 
     if (this.Settings.hasOwnProperty("ID")){ 
      return this.Settings.ID== "606d7afb-3dce-4533-8f8d-6411715e5b47"; 
     }   
     return false; 
    } 
}) 

は、新しいAPIからビルダーフィルタを使用してコードのC#バージョンが必要です。私のために働いた

+0

こんにちはディオのために働く、とスタックオーバーフローを歓迎する必要があります!これまでに試したこと、そしてそれがどれほど効果を発揮しているかを、私たちに見せてもらえますか?できるだけ明確かつ有用なものにするために、質問を編集して再編集することをお勧めします。 –

答えて

0

ソリューション:

var collection = _database.GetCollection<BsonDocument>("BackgroundTasks"); 
var jsFilter = new BsonDocument(new BsonDocument("$where", new BsonJavaScript("function() { if (this.Settings.hasOwnProperty('TranslationMemoryId')){return this.Settings.TranslationMemoryId == '"+tmid.ToString()+"';}return false; }"))); 
var filter = jsFilter & (Builders<BsonDocument>.Filter.Eq("Status", 3) | Builders<BsonDocument>.Filter.Eq("Status", 4)); 
var results = collection.Find(filter).ToList(); 
0

あなたはあなたが強く型付けされている場合、これはそうでなければ、同じビルダーを使用することができますが、代わりにテキストを提供する、ビルダーとLINQを使用して達成できる(これらは、下に出て表彰されています強く型付けされたクエリ)。 $は、フィルタが存在するとあなたはあなたのJavaScript関数を置き換えることができ、あなたの$を置き換えることができますか

で$でこのような何かがあなた

var builder = Builders<YourModel>.Filter; 

var fieldExists = builder.Exists(x => x.Settings.TranslationMemoryId); 
//var fieldExists = builder.Exists("TranslationMemoryId"); 
var statusFilter = builder.In(x => x.Status, new[] { 3, 4 }); 
//var statusFilter = builder.In("Status", new[] { 3, 4 }); 
var transIdFilter = builder.Eq(x => x.TranslationMemoryId, "606d7afb-3dce-4533-8f8d-6411715e5b47"); 
//var transIdFilter = builder.Eq("TranslationMemoryId", "606d7afb-3dce-4533-8f8d-6411715e5b47"); 

var query = builder.And(builder.And(fieldExists, transIdFilter), statusFilter); 

var results = db.getCollection("BackgroundTasks") 
    .Find(query) 
    .ToList(); 
関連する問題