Вот что я работаю с:
{
"_id": ObjectId("53b4402ae1382335c95952d3"),
"created": ISODate("2014-07-02T10:23:54.245Z"),
"modified": ISODate("2011-11-28T10:06:25.186Z"),
"source": [{
"instances": [{
"analyst": "harry",
"date": ISODate("2014-07-02T10:23:54.242Z"),
"reference": "abb32"
},
{
"analyst": "david",
"date": ISODate("2014-07-02T10:33:02.296Z"),
"reference": "can26"
}],
"name": "Apples"
},
{
"instances": [{
"analyst": "critsAPI",
"date": ISODate("2011-11-28T10:06:25.156Z"),
"reference": "z561c"
}],
"name": "Oranges"
}],
"releasability": [],
}
То, что я хотел бы это подсчет каждого документа, который имеет «даты экземпляры» в определенном диапазоне (позволяет сказать, месяц) наряду с определенным именем. Я использовал два запроса с «elemMatch» и, к сожалению, я не получаю ожидаемых результатов. Вот что я попытался с помощью elemMatch и instances.date:
collection.find(
{
'source':
{
'$elemMatch' : {
'name':'Apples',
'instances.date' : {'$lte' : ISODate("2014-07-30T00:00:00Z") ,
'$gte' : ISODate("2014-07-01T00:00:00Z")}
}
}
}
).count()
Вот с вложенной elemMatch:
collection.find(
{
'source':
{
'$elemMatch' : {
'name':'Apples',
'instances': {
'$elemMatch' : {
'date' : {'$lte' : ISODate("2014-07-30T00:00:00Z") ,
'$gte' : ISODate("2014-07-01T00:00:00Z")}
}
}
}
}
}
).count()
Спасибо заранее.
Зачем использовать '$ and' здесь? Общая предпосылка верна в отношении метода агрегирования, но вы, похоже, не понимаете основ операндов запроса. ** И ** условия в основном «неявные». То есть «101» для тех, кто стремится передать знания. –
Большое спасибо Дэйву, это именно то, что я искал. Я не понимал, что только документ будет включен в счет. Мне понадобилось количество различных элементов массива. – user2012481