评估MongoDB ID数组

时间:2018-03-05 23:20:30

标签: javascript node.js mongodb mongoose

我有一个搜索功能,根据用户对各种过滤器的输入,从我的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 };
  }

1 个答案:

答案 0 :(得分:2)

您的标签&你的问题的介绍提到了mongoose,但你所有的逻辑似乎都是直接使用mongo。

如果您使用的是猫鼬this answer,请解决您的问题。

否则,来自MongoDB documentation的这个逻辑可能会有所帮助

db.bios.find(
  {
    _id: { $in: [ 5,  ObjectId("507c35dd8fada716c89d0013") ] }
  }
)