簡體   English   中英

有沒有辦法將 mongoDB json 查詢轉換為 mongodb 驅動程序

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM