#mongodb #mongodb-query #aggregation-framework
#mongodb #mongodb-запрос #структура агрегации
Вопрос:
Например: — Ниже приведен образец документа в коллекции «клубы»,
Образец документа
{
"_id" : ObjectId("5cb8218ce2911e7c707e27fa"),
"name" : "name 1",
"members" : {
"user_1" : {
"created" : ISODate("2019-04-18T07:04:44.748Z"),
"lastActive" : 1555584757282,
"state" : 1,
"unreadMessages" : 0,
"userId" : "user_1_id"
},
"user_2" : {
"lastActive" : 1555588409686,
"state" : 1,
"unreadMessages" : 0,
"userId" : "user_2_id"
}
}
}
Запрос Mongo DB должен возвращать следующие поля :-
Желаемый результат-
{
{
"_id" : ObjectId("5cb8218ce2911e7c707e27fa"),
"name" : "name 1",
"members" : {
"user_1" : {
"lastActive" : 1555584757282
},
"user_2" : {
"lastActive" : 1555588409686
}
}
}
}
Ответ №1:
Вы можете использовать приведенную ниже агрегацию
db.collection.aggregate([
{ "$addFields": {
"members": {
"$arrayToObject": {
"$map": {
"input": { "$objectToArray": "$members" },
"in": {
"k": "$this.k",
"v": { "lastActive": "$this.v.lastActive" }
}
}
}
}
}}
])
Комментарии:
1. Имя пользователя в объекте members может отличаться в каждом документе. Мне нужно написать запрос, чтобы найти временную метку lastActive во всех документах для всех разных пользователей.