Как мне найти частичное совпадение с вложенным документом MongoDB?
У меня есть набор документов в базе данных MongoDB, которые описывают место встречи. Он также содержит информацию о времени работы места встречи.
Пример:
{
_id: ObjectId("54ccbb90cbcb91146d000001"),
name: "temp_can_add_slots_to_position",
seats: 4,
slots: [
{
_id: ObjectId("54ccbb91cbcb91146d000002"),
start_time: 1441094400,
end_time: 1441096200,
status: "test"
},
{
_id: ObjectId("54ccbb91cbcb91146d000003"),
start_time: 1441096200,
end_time: 1441098000,
status: "open"
},
{
_id: ObjectId("54ccbb91cbcb91146d000004"),
start_time: 1441098000,
end_time: 1441099800,
status: "open"
},
{
_id: ObjectId("54ccbb91cbcb91146d000005"),
start_time: 1441099800,
end_time: 1441101600,
status: "open"
},
{
_id: ObjectId("54ccbb91cbcb91146d000006"),
start_time: 1441101600,
end_time: 1441103400,
status: "open"
},
{
_id: ObjectId("54ccbb91cbcb91146d000007"),
start_time: 1441103400,
end_time: 1441105200,
status: "open"
},
{
_id: ObjectId("54ccbb91cbcb91146d000008"),
start_time: 1441105200,
end_time: 1441107000,
status: "open"
},
],
type: "private"
}
Я хочу найти документ и вернуть только документ с вложенными документами, которые имеют статус "открыто". Я не могу написать предложение "найти", которое может достичь этого.
Например, я хотел бы, чтобы документ, как указано выше, оставался без изменений, за исключением вложенного документа "slot" с идентификатором объекта 54ccbb91cbcb91146d000002.
Это, например, возвращает весь документ:
find({_id: ObjectId("54ccbb90cbcb91146d000001"),"slots.status": "open"}).limit(10)
(На самом деле сидит внутри какого-то Ruby, который выглядит так):
def list_open_slots_at_a_position(id)
working_position = @coll.find( { "_id:" => "ObjectId(\"#{id}\")", "slots.status:" => "open" } ).to_a
puts working_position
end
Что я делаю неправильно?