У меня есть актив коллекции, и это мои данные
{
"_id" : ObjectId("5e71d235a3b5401685a058"),
"company" : ObjectId("5e6b834b5991d70945840"),
"asset_name" : "LG-OLED-55-Inch",
"installedAt" : ["lobby", "storeroom", "f105"],
}
{
"_id" : ObjectId("5e71d235a3b540168475d8"),
"company" : ObjectId("5e6b834b5991d70945840"),
"asset_name" : "LG-OLED-32-Inch",
"installedAt" : ["lobby", "f108"],
}
{
"_id" : ObjectId("5eb3d53a7e16dc70244d6578"),
"company" : ObjectId("5e6b834b5991d70945840"),
"asset_name" : "LG-OLED-68-Inch",
"installedAt" : ["tvroom", "f105"],
}
{
"_id" : ObjectId("5eb3d53a7e16dc7024474a12"),
"company" : ObjectId("5e6b834b5991d70945840"),
"asset_name" : "LG-OLED-22-Inch",
"installedAt" : ["tvroom"],
}
Итак, для приведенных выше данных мое требование состоит в том, чтобы искать ключевое слово в installedAt
и возвращать все элементы, соответствующие ключевому слову, которое пользователь предоставляет .
Например, если пользователь ищет f10
, тогда мы должны искать все массивы installedAt
в assests
и возвращать, как показано ниже
"installedAt": ["f105","f108"]
И я попытался использовать $in
для получения похожих элементов, но он работает не так, как я ожидал. Это мой запрос
var autoRecords =[];
key = [searchString];
key.forEach(function(opt){
autoRecords.push(new RegExp(opt,"i"));
});
Assets.find({ "installedAt" : {"$in" : autoRecords},"company": companyId},{"installedAt" : 1})
Итак, для приведенного выше запроса, когда я пытаюсь отправить текст для поиска, который равен f10
, результат будет следующим:
[
{"installedAt":["lobby", "storeroom", "f105"],"_id":"5e71d235a3b5401685a058"},
{"installedAt":["lobby", "f108"],"_id":"5e71d235a3b540168475d8"},
{"installedAt":["tvroom", "f105"],"_id":"5eb3d53a7e16dc70244d6578"},
]
Он получает все элементы в массив installedAt
, даже если он его найдет. Итак, может ли кто-нибудь помочь мне получить только согласованные элементы в массиве и попытаться получить этот формат
"installedAt": ["f105","f108"]