我有一个搜索功能,根据用户对各种过滤器的输入,从我的 mongoDB 返回过滤后的数据。下面是一个示例,其中返回与 lastName
值匹配的记录。使用 $in
将这个值数组传递给 Mongoose/Mongo:
if (lastName) {
let arrlastName = [];
arrlastName = lastName.split(",");
_.each(arrlastName, (l, key, c) => {
arrlastName[key] = new RegExp(arrlastName[key], "i");
});
search['name.last'] = { $in: arrlastName };
}
上面的代码按预期工作。
但是,除了匹配名称之外,我还想根据评估用户“_id”的过滤器返回记录。挑战是,这里的“_id”不是一个字符串,而是一个mongoDB对象Id。
现在,当我搜索“_id”的单个值时,这很容易做到,在这种情况下我只需这样做:
if (personId) search['_id'] = new mongo.ObjectID(personId);
这也按预期工作。这将仅返回与此 _id
匹配的结果。
但是在这种情况下,如何针对值数组进行评估 - 就像我在这个问题顶部附近的代码中对 lastName
所做的那样?那会是什么样子?这是我尝试过的(没有成功):
if (person) {
let personId = new mongo.ObjectID(person);
let arrPerson = [];
arrPerson = personId.split(",");
_.each(arrPerson, (l, key, c) => {
arrPerson[key] = new RegExp(arrPerson[key], "i");
});
search['_id'] = { $in: arrPerson };
}
最佳答案
您的标签和问题的介绍提到了 mongoose,但您的所有逻辑似乎都直接使用 mongo。
如果您使用 Mongoose this answer应该能解决你的问题。
否则这个逻辑来自MongoDB documentation可能会有所帮助
db.bios.find(
{
_id: { $in: [ 5, ObjectId("507c35dd8fada716c89d0013") ] }
}
)
关于javascript - 评估 MongoDB ID 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49121087/