【问题标题】:Evaluating an Array of MongoDB IDs评估 MongoDB ID 数组
【发布时间】:2018-08-13 17:39:12
【问题描述】:

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

【问题讨论】:

    标签: javascript node.js mongodb mongoose


    【解决方案1】:

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

    如果您使用猫鼬this answer 应该可以解决您的问题。

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多