Передать запрос оболочки монго в библиотеку 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
перед выполнением запроса.