Найти объект со значением в его массиве

Я использую 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" })
Другие вопросы по тегам