我需要使用C#驱动程序执行以下MongoDB查询,以在“代码”类型的字段上执行javascript函数,并检查内部包含guid asa字符串的数据:
有效的mongodb查询是:
MATCH (n:Actor) WHERE n.name CONTAINS "Tom"
USING INDEX n:Actor(name)
RETURN n
需要使用来自新API的Builders过滤器的C#版代码。
答案 0 :(得分:1)
对我有用的解决方案:
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();
答案 1 :(得分:0)
如果你是强类型的,你可以使用构建器和linq实现这一点,否则你可以使用相同的构建器但是提供文本(这些在强类型查询下面被推荐)。您可以使用$ exists过滤器替换您的javascript函数,并且可以将$或$ in替换为
这样的事情对你有用
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();