我有一个搜索功能,根据用户对各种过滤器的输入,从我的mongoDB返回过滤后的数据。这是一个示例,其中返回的记录与lastName
值匹配。使用$in
:
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 };
}
答案 0 :(得分:2)
您的标签&你的问题的介绍提到了mongoose,但你所有的逻辑似乎都是直接使用mongo。
如果您使用的是猫鼬this answer,请解决您的问题。
否则,来自MongoDB documentation的这个逻辑可能会有所帮助
db.bios.find(
{
_id: { $in: [ 5, ObjectId("507c35dd8fada716c89d0013") ] }
}
)