У меня есть документ, который включает в себя поле, как это:MongoDB: Как подсчитать поле, если оно соответствует условию?
{
...
log: [
{
utc_timestamp: ISODate("2014-11-15T10:26:47.337Z"),
type: "clicked"
},
{
utc_timestamp: ISODate("2014-10-15T16:12:51.959Z"),
type: "emailed"
},
{
utc_timestamp: ISODate("2014-10-15T16:10:51.959Z"),
type: "clicked"
},
{
utc_timestamp: ISODate("2014-09-15T04:59:19.431Z"),
type: "emailed"
},
{
utc_timestamp: ISODate("2014-09-15T04:58:19.431Z"),
type: "clicked"
},
],
...
}
Как получить количество записей журнала типа «щелкнул» с этого месяца, если только не существует регистрационная запись типа «по электронной почте " этот месяц?
Другими словами, я хочу узнать, какие клики не были отправлены связанное электронное письмо.
Таким образом, в этом примере счет будет равен 1, так как в последней записи с щелчком отсутствует запись «по электронной почте».
Примечание: для этого прецедента клики не имеют уникальных идентификаторов - это все данные, которые регистрируются.
Если я правильно понял, что журнал является собственностью документа, я думаю, что решение будет включать в себя $ unwind. Кроме того, я думаю, что отдельные клики должны иметь уникальные значения _id, даже если вы их не ожидали. Свойство _id автоматически добавляется к членам массива поддокумента, хотя, возможно, вы его подавили? – Semicolon
@Semicolon Я не знал о том, что свойство _id автоматически назначается для членов массива поддокумента. Кажется, MongoEngine действительно подавляет это - журнал настроен как «ListField», и я просто добавляю словарь к нему. – okoboko