Я пытаюсь получить все документы в коллекции на основе значений массива поддокумента. Это моя структура данных в коллекции Я ищу:выборка документов на основе значения вложенного массива subdoc
{
_id: ObjectId('...'),
name: "my event",
members:
[
{
_id: ObjectId('...'),
name: "family",
users: [ObjectId('...'),ObjectId('...'),ObjectId('...')]
},
{
_id: ObjectId('...'),
name: "work",
users: [ObjectId('...'),ObjectId('...'),ObjectId('...')]
}
]
}
Я должен отметить, что схема этих объектов определяются следующим образом:
События:
{
name: { type: String },
members: {type: [{ type: ObjectId, ref: 'MemberGroup' }], default:[] }
}
MemberGroup:
{
name: { type: String },
users: [{type: mongoose.Schema.Types.ObjectId, ref: 'User'}]
}
и, конечно же, Пользователь - это просто произвольный объект с идентификатором.
Что я пытаюсь извлечь: Я хочу получить все события, у которых есть определенный идентификатор пользователя в поле member.users.
я не уверен, если его событие можно в одном вызове, но вот то, что я пробовал:
var userId = new mongoose.Schema.ObjectId('57d9503ef10d5ffc08d6b8cc');
events.find({members: { $elemMatch : { users: { $in: [userId]} } }})
этот синтаксис работает, но не возвращают элементы, даже если я знаю, что есть соответствующие элементы (используя robomongo визуализировать дб)
Синтаксис является неправильный - 4 левых фигурных и 5 правых фигурных (также отсутствуют правые закрывающие скобки). Я исправил синтаксис, и он работает: 'db.events.find ({members: {$ elemMatch: {users: {$ in: [userId]}}}})' – TomG
@ Нет, это была только копия вставки –
Я понимаю, но, как я уже сказал, когда я запускаю этот запрос, он работает. поэтому я думаю, вы забываете что-то еще ... – TomG