У меня есть коллекция User, в которой также есть коллекция «UserSubscription», в которой также есть «Subscription> Publication».
У меня есть следующая коллекция пользователей в Монго
/* 1 */
{
"_id" : 1,
"UserSubscriptions" : [
{
"_id" : 1,
"Subscription" : {
"_id" : 1,
"Publication" : {
"_id" : 1,
"Code" : "1MM",
},
},
{
"_id" : 2,
"Subscription" : {
"_id" : 2,
"Publication" : {
"_id" : 2,
"Code" : "2MM",
},
},
{
"_id" : 7,
"Subscription" : {
"_id" : 7,
"Publication" : {
"_id" : 1,
"Code" : "1MM",
},
}
]
}
/* 2 */
{
"_id" : 2,
"UserSubscriptions" : [
{
"_id" : 3,
"Subscription" : {
"_id" : 3,
"Publication" : {
"_id" : 1,
"Code" : "1MM",
}
}
]
}
/* 3 */
{
"_id" : 3,
"UserSubscriptions" : [
{
"_id" : 4,
"Subscription" : {
"_id" : 4,
"Publication" : {
"_id" : 1,
"Code" : "1MM",
}
}
]
}
/* 4 */
{
"_id" : 4,
"UserSubscriptions" : [
{
"_id" : 5,
"Subscription" : {
"_id" : 5,
"Publication" : {
"_id" : 2,
"Code" : "2MM",
}
}
]
}
Я пытаюсь получить все «Код публикации» и счетчик (пользователь подписался на счетчик подписок). Итак, из вышеприведенной коллекции я хочу получить такой результат
PublicationCode Count (Number of users)
1MM 3
2MM 2
Я попытался выполнить запрос MongoDB, но не получил фактический результат
db.runCommand(
{ aggregate : "User", pipeline : [
{$match: { "UserSubscriptions.0": {$exists: true}} },
{$group: {_id:"$UserSubscriptions.Subscription.Publication.Code", count:{$sum:1}}},
{$project: {_id:1,count:1 } }
]}
);
Посоветуйте, пожалуйста, какой-нибудь способ использовать группу для сбора детей
(Robo 3T 1.2.1) (MongoDB.Driver 2.4.4)
Соответствующий запрос драйвера C # Mongo:
var unWind = new BsonDocument
{
{ "$unwind", "$UserSubscriptions" }
};
var group = new BsonDocument
{{"$group",
new BsonDocument
{{ "_id", new BsonDocument {{"id",
"$UserSubscriptions.Subscription.Publication.Code"}, }},
{"Count", new BsonDocument {{"$sum", 1}} }}
}};
var pipeline = new[] { unWind, group };
var ff = _readOnlyAccess.GetDatabase(this._Database).GetCollection<T>
(this._Collection).Aggregate<T>(pipeline);
Приведена ошибка
FormatException: Невозможно десериализовать 'Int32' из BsonType 'Document'.