У меня есть коллекция в моей базе данных as,
[
{
"groupName" : "testName",
"participants" : [
{
"participantEmail" : "test@test.com",
"lastClearedDate" : 12223213123
},
{
"participantEmail" : "test2@test.com",
"lastClearedDate" : 1234343243423
}
],
"messages" : [
{
"message":"sdasdasdasdasdasd",
"time":22312312312,
"sender":"test@test.com"
},
{
"message":"gfdfvd dssdfdsfs",
"time":2231231237789,
"sender":"test@test.com"
}
]
}
]
Это коллекция группы, которая содержит всех участников и сообщения в этой группе.Поле времени внутри сообщения - это отметка времени.
Я хочу получить все сообщения внутри группы, которые публикуются после указанной даты и группируются по дате.Я написал следующий код,
ChatGroup.aggregate([
{ $match: { group_name: groupName } },
{ $unwind: "$messages" },
{ $match: { "messages.time": { $gte: messagesFrom } } },
{
$project: {
_id: 0,
y: {
$year: {
$add: [new Date(0), { $multiply: [1000, "$messages.time"] }]
}
},
m: {
$month: {
$add: [new Date(0), { $multiply: [1000, "$messages.time"] }]
}
},
d: {
$dayOfMonth: {
$add: [new Date(0), { $multiply: [1000, "$messages.time"] }]
}
}
}
},
{
$group: {
_id: {
year: "$y",
month: "$m",
day: "$d"
},
messages: { $push: "$messages" },
count: { $sum: 1 }
}
}
]).then(
group => {
console.log("length of messages", group);
resolve(group);
},
err => {
console.log(err);
}
);
});
, и получаю следующий вывод:
[
{
"_id": {
"year": 50694,
"month": 9,
"day": 5
},
"messages": [],
"count": 3
},
{
"_id": {
"year": 50694,
"month": 8,
"day": 27
},
"messages": [],
"count": 1
},
{
"_id": {
"year": 50694,
"month": 8,
"day": 26
},
"messages": [],
"count": 10
}
]
Я не получаю сообщения, но счет правильный.Кроме того, время, которое отображается в результате, является неправильным, например, год, дата и месяц.Версия Mongo - 3.2.
Я передал групповую информацию и отправил документацию из mongodb вместе с другими вопросами по stackoverflow по группе mongo:
Что я делаю не так?