将mongo shell查询作为字符串传递给mongo-php-library

时间:2018-01-27 17:03:59

标签: mongodb mongodb-query aggregation-framework mongodb-.net-driver php-mongodb

以下是我想使用mongo-php-library运行的查询, 我想将查询作为字符串传递给驱动程序。不想将json转换为php数组。

static void TestMongoShellV3()
{
    var start = new DateTime(2017, 01, 01, 9, 57, 44);
    var end = new DateTime(2017, 12, 01, 18, 5, 18);
    string dbname = "SURVEY_POC_MOIZ";
    string collname = "_survey.response";
    _database = _client.GetDatabase(dbname);
    var collection = _database.GetCollection<BsonDocument>(collname);
    string bson = @"[
        {
            $group:{
                _id: {
                    Status : '$Status',
                    Survey: '$SurveyName',
                    SurveyId: '$SurveyId'
                },
                Count: {$sum: 1}
            }
        },
        {
            $group:{
                _id: {
                    SurveyName: '$_id.Survey',
                    SurveyId: '$_id.SurveyId',
                },
                Status: {$push: '$_id.Status'},
                Count : { $push : '$Count' } 
            }
        },
        {
            $project:{
                _id: 0,
                SurveyId: '$_id.SurveyId',
                Survey: '$_id.SurveyName',
                Status: 1,
                Count: 1
            }
        },
        {
            $sort: {Survey: -1}
        }
    ];";
    var pipeline = BsonSerializer.Deserialize<BsonArray>(bson).Select(p => p.AsBsonDocument).ToList<BsonDocument>();
    var result = collection.Aggregate<BsonDocument>(pipeline).ToList();
    showResult(result);
}

这是我正在使用的图书馆,mongo-php

我已经看过question

我使用mongo c#driver做了类似的事情。下面是c#代码,

{{1}}

1 个答案:

答案 0 :(得分:0)

您无法使用new driver执行此操作,因为它不再具有execute方法。以下是文档的附加内容:

  

警告

     

此方法调用的»eval命令在MongoDB 3.0 +中已弃用。

关于这个:

  

不想将json转换为php数组。

这是唯一的解决方案。在执行查询之前,您可以使用json_decode以编程方式将string转换为array