У меня есть документ, подобный приведенному ниже. Поле periods
определяет периоды, когда пользователь имел доступ к некоторым данным.Как запросить два поля во встроенном массиве?
{
"_id":ObjectId("51878ecc0e9528429ab6e7cf"),
"name" : "Peter Flack",
"periods":[
{
"from":1,
"to":2
},
{
"from":4,
"to":6
},
{
"from":10,
"to":12
}
]
}
Теперь я хочу, чтобы определить, является ли произвольный период в любой из периодов в period
поле. Я попытался следующие:
db.subs.find({"periods.from" : {$gte : 1}, "periods.to" : {$lte : 12}, "periods.from" : {$lte : 12}, "periods.to" : {$gte : 1}})
Этот запрос возвращает документ, поскольку есть один элемент в массиве с from
> = 1 и antoher элемент с to
< = 12.
Но, я хочу верните документ только в том случае, если оба from
и to
в том же элементе соответствуют критериям.
Как бы написать запрос для достижения этого?
К сожалению, не работает. Насколько я понимаю, $ elemMatch предназначен для проекта. То есть, это влияет только на то, какие поля в документе возвращаются, а не если документ должен быть возвращен или нет. Глядя в документацию, он используется только во втором аргументе функции find(). – luttkens
@luttkens '$ elemMatch' также является оператором запроса. Документы [здесь] (http://docs.mongodb.org/manual/reference/operator/elemMatch/#op._S_elemMatch). По мере того как вы написали запрос, он работает нормально, я думаю, что ваши операторы '$ gte' и' $ lte' заменены на то, что вы действительно ищете. – JohnnyHK
@luttkens: $ elemMatch будет работать. Я изменил свой предыдущий комментарий, пожалуйста, проверьте –