Передать запрос оболочки монго в библиотеку mongo-php в виде строки

Ниже приведен запрос, который я хочу выполнить с помощью библиотеки mongo-php. Я хочу передать запрос в виде строки драйверу. Не хочу конвертировать json в php-массивы.

db.getCollection('_survey.response').aggregate([
    {
        $match:
        {
            $and:[
                {
                    "Provider.Name": {
                    $in:[
                            "Comcast",
                            "AT&T"
                        ]
                    }
                },
                {
                    CreatedOn: {
                        $lt: ISODate('2017-05-10'),
                        $gt: ISODate('2017-01-01')
                    }
                }
            ]
        }
    },
    {
        $group:{
            _id: {
                Status : "$Status",
                Survey: "$SurveyName"
            },
            SurveyId: {$addToSet: "$SurveyId"},
            Count: {$sum: 1}
        }
    },
    {
        $group:{
            _id: {
                SurveyName: "$_id.Survey"
            },
            Status: {$push: "$_id.Status"},
            Count : { $push : "$Count" } 
        }
    },
    {
        $project:{
            _id: 0,
            SurveyId: "$_id.SurveyId",
            Survey: "$_id.SurveyName",
            Status: 1,
            Count: 1
        }
    }
]);

Это библиотека, которую я использую, mongo-php

Я уже видел этот вопрос.

Я сделал то же самое, используя драйвер Mongo C#. Ниже приведен код C#,

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);
}

1 ответ

Вы не можете сделать это с новым драйвером, так как у него больше нет метода execute. Вот дополнительные материалы из документов:

Предупреждение

Команда "eval, которую вызывает этот метод, не рекомендуется в MongoDB 3.0+.

В соответствии с этим:

Не хочу конвертировать json в php-массивы.

Это единственное решение. Вы могли бы использовать json_decode программно преобразовать string в array перед выполнением запроса.

Другие вопросы по тегам