![](/img/trans.png)
[英]Convert lambda expressions to json objects using MongoDB.Driver
[英]Is there a way to convert mongoDB json query to mongodb driver
我是 mongoDB 的新手,目前正在開發已經創建的應用程序。 項目在.net core中,使用MongoDb驅動與mongo交互。 由於我不熟悉mongo,客戶端提供了查詢來獲取數據,但我無法將其轉換為C#中的mongoDB驅動程序代碼。
任何人都可以幫我解決這個問題。 這是提供的查詢:
db['customer'].aggregate([
{
'$match': {
'$and': [
{'Date': {'$gt': ISODate('2020-07-01T00:00:00.000Z'), '$lt': ISODate('2020-08-24T00:00:00.000Z')}},
]
}
},
{
'$project': {
'domain': {$arrayElemAt: [{'$split':['$Referer','/']},2]},
'referer': '$Referer'
}
},
{
'$group': {
'_id': {'domain': '$domain'},
'count': {'$sum':1}
},
},
{
'$sort':{'count':-1}
}
])
任何幫助將非常感激。
謝謝
您可以在 C# 驅動程序中使用 fluent 聚合 api 來構建聚合管道,這有一些輕微的缺點,因為某些東西在類型安全的方式中arrayElemAt
,例如arrayElemAt
,但我們可以只使用 BsonDocument 來表示這一點.
var client = new MongoClient();
var db = client.GetDatabase("test");
var customers = db.GetCollection<Customer>("customer");
var dateGreaterThan = DateTime.UtcNow.AddDays(-1);
var dateLessThan = DateTime.UtcNow.AddDays(1);
var results = await customers.Aggregate()
.Match(
Builders<Customer>.Filter.Gt(x => x.Date, dateGreaterThan)
& Builders<Customer>.Filter.Lt(x => x.Date, dateLessThan)
)
.Project<CustomerProjection>(
Builders <Customer>.Projection.Combine(
Builders<Customer>.Projection.Include(x => x.Referer),
BsonDocument.Parse(@"{ ""Domain"": { $arrayElemAt: [ { ""$split"": [ ""$Referer"", ""/"" ] }, 2 ] } }")
))
.Group(projection => projection.Domain, grouping => new {Id = grouping.Key, Count = grouping.Count()})
.SortByDescending(document => document.Count)
.ToListAsync();
public class Customer
{
public ObjectId Id { get; set; }
public DateTime Date { get; set; }
public string Referer { get; set; }
}
public class CustomerProjection
{
public string Referer { get; set; }
public string Domain { get; set; }
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.