Найти объект со значением в его массиве
Я использую lokijs, который имеет "похожий на монго" язык запросов.
devices.insert({key:'d1', name:'Device1', users:['u1'], status: 'OK', current_wl:'123'})
devices.insert({key:'d2', name:'Device2', users:['u1','u1'], status: 'OK', current_wl:'123'})
devices.insert({key:'d3', name:'Device3', users:['u2','u3'], status: 'OK', current_wl:'123'})
devices.insert({key:'d4', name:'Device4', users:['u1','u2','u3','u4'], status: 'OK', current_wl:'123'})
Моя попытка найти устройство с пользователем "u1" в своем массиве users возвращает список пустых файлов:
a= devices.find( {users:{ "$in" : ["u1"] }} )
console.log("A", a);
Является ли запрос правильным, если проблема была для mongodb? Есть ли другой способ сделать это в монго? Есть ли другой способ сделать это в lokijs?
2 ответа
Я нашел решение (или обходной путь), используя where
:
a= devices.where( function(obj){
return obj.users.indexOf('u1') > -1;
}
);
Я не уверен насчет lokijs, но это правильный запрос в Mongo.
Если вы когда-нибудь будете запрашивать документы, которые содержат один конкретный элемент в массиве "пользователи", более простой запрос для этого случая в Mongo будет:
db.collection.find({ users: "u1" })