gpt4 book ai didi

c# - MongoDB 选择与 QueryBuilder

转载 作者:可可西里 更新时间:2023-11-01 10:44:03 25 4
gpt4 key购买 nike

我正在尝试从我的数据库中选择值,但目前我无法做到这一点,尽管我知道该方法除了将 QueryBuilder 类作为参数之外,我不知道该怎么做.我只找到了一个参数或所有参数都不为空的查询的解决方案。在我的例子中,我有一个带 ID 的列表和 4 个不必传递给函数的参数,因此它们可以为空。

我当前的代码如下所示。

collection = db.GetCollection<Datapoint>("test");

var query = new QueryBuilder<Datapoint>();
var queryattributes = new List<IMongoQuery>();
var ids = new List<IMongoQuery>();

// Add all Attributes if there
if (fromdate != null)
{
BsonDateTime from = BsonDateTime.Create(fromdate);
queryattributes.Add(Query.GTE("UTCTimestamp", from));
}
if (to != null)
{
BsonDateTime bto = BsonDateTime.Create(to);
queryattributes.Add(Query.LTE("UTCTimestamp", bto));
}
if (evId != null)
{
queryattributes.Add(Query.EQ("EvId", evId));
}
if (evType != null)
{
queryattributes.Add(Query.EQ("EvType", evType));
}

// Add all ID's
Parallel.ForEach(idList, data =>
{
lock (query)
{
ids.Add(Query.EQ("CId", data));
}
});

// But everything in the Query
query.Or(ids);

// Add Queryattributes if there
if (queryattributes.Count > 0)
{
query.And(queryattributes);
}

var result = collection.FindAs<Datapoint>(query);

我试图在没有 Linq 的情况下完成它,因为我发现了无数的测试,这些测试表明 linq 慢得多,并且因为我想将它作为数据库测试运行,所以我有点需要执行大量查询的性能.

Linq 查询看起来像这样

var query2 =
from e in collection.AsQueryable<Datapoint>()
where idList.Contains(e.CId)
&& (evtId == null || e.EvId == evId)
&& (evType == null || e.EvType == evType.Value)
&& (fromdate == null || Query.GTE("UtcTimestamp", BsonDateTime.Create(fromdate)).Inject())
&& (to == null || Query.LT("UtcTimestamp", BsonDateTime.Create(to)).Inject())
select e;

最佳答案

QueryBuilder 不会在其中保存查询。您使用它生成 IMongoQuery,然后使用该查询实际查询数据库。

看来你的代码结尾应该是这样的;

// But everything in the Query
IMongoQuery mongoQuery = query.Or(ids);

// Add Queryattributes if there
if (queryattributes.Count > 0)
{
mongoQuery = query.And(queryattributes);
}

var result = collection.FindAs<Datapoint>(mongoQuery);

关于c# - MongoDB 选择与 QueryBuilder,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20858896/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com