有没有办法找出MongoDB文档数组中是否存在单个元素。
例如: 如果我有一个文档
{
"_id": "A",
"userId": "B",
"selectedUsers": ["C", "D"]
}
我有另外一个数组,内容为["E", "C"]。我想编写一条查询语句,当提供userId和上述数组时,该查询语句的结果应为[false, true],因为"E"不在selectedUsers数组中,而"C"在selectedUsers数组中。
我知道我可以先找到具有给定userId的文档,然后对它使用Array.find()来查找各个元素。但我想知道是否有一种方法可以在mongodb查询中完成这个操作。
此外,我正在使用nodeJS和mongoose。
只是为了明确起见,我需要使用mongodb查询来获得与下面js代码相同的功能。
// req is the http request
// Selected is the mongoose Model for above document
// usersToCheck = ["E", "C"] (this is the second array)
const result = Selected.findOne({ userId: req.userId});
const { selectedUsers } = result;
const response = usersToCheck.map(uid => {
if(selectedUsers.some(id => id === uid)){
return true;
}
return false;
})
// response = [false, true]
假设 usersToCheck 和 selectedUsers 的大小均为n,那么上述代码的复杂度为O(n^2)。
我想以某种方式使用mongodb查询来获得与上述相同的响应。这样,我就可以根据 selectedUsers 数组对集合进行索引,并提高获取响应所需的时间。
或者,您有任何其他改进上述代码的方法都可以。
非常感谢您的帮助。
selectedUsers
是否没有 "E",但有 "C" 吗? - Valijon