下面是我想使用 mongo-php-library 运行的查询,我想将查询作为字符串传递给驱动程序。不想将 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);
}