如何使用官方MongoDB-CSharp-Driver动态地将条件运算符应用于字段?

Vyr*_*tek 5 c# .net-4.0 mongodb mongodb-.net-driver

我正在尝试生成一个查询,查找成本大于3的所有大型红色东西.

这个查询似乎就是我所追求的:

{ "color" : "red", "size" : "large", "cost" : { "$gt" : 3.0 } }
Run Code Online (Sandbox Code Playgroud)

但是,我无法找到使用官方MongoDB CSharp驱动程序创建成本条件的优雅方法.这是一个似乎创建查询的hack:

QueryConditionList gt = Query.GT("cost", BsonDouble.Create(3));

QueryDocument query = new QueryDocument();
query.Add("color", "red");
query.Add("size", "large");
query.Add(gt.ToBsonDocument().Elements);

List<BsonDocument> results = events.Find(query).ToList();
Run Code Online (Sandbox Code Playgroud)

另一种似乎有效的方法是这样的:

QueryDocument query = new QueryDocument();
query.Add("color", "red");
query.Add("size", "large");
query.Add("cost", new BsonDocument("$gt", BsonDouble.Create(3)));

List<BsonDocument> results = events.Find(query).ToList();
Run Code Online (Sandbox Code Playgroud)

这些方法中的任何一种都是实现这一目标的好方法吗?还有另一个吗?

我需要使用允许我动态构建查询并添加将在查询中涉及的字段的技术.我希望找到一种通过query.Add()添加条件的方法,但我不知道这是否可行.

任何帮助表示赞赏.

Eve*_*man 6

您可以使用"查询"构建器,如下所示:

var query = Query.And(
              Query.EQ("color", "red"), 
              Query.EQ("size", "large"), 
              Query.GT("cost", 3)
            );
Run Code Online (Sandbox Code Playgroud)

更新对不起,我现在看到你在问什么.

你也可以这样做:

int i = 0;
var qc = QueryComplete[3];
qc[i++] = Query.EQ("color", "red");
qc[i++] = Query.EQ("size", "large");
qc[i++] = Query.GT("cost", 3);
var query = Query.And(qc);
Run Code Online (Sandbox Code Playgroud)

这样,您仍然可以使用构建器方法并使其成为动态方法.