首页 > 解决方案 > 如何在正常字段的feathersjs中查询ObjectIds?

问题描述

我有一系列产品变体,即同一产品的不同版本。有一个单独的产品集合。变体文档有一个product_id字段,里面保存了产品集合中对应产品文档的ObjectId;它的类型是 ObjectId。此字段的所有搜索都返回 0 条记录。如果我将类型更改为字符串,我可以成功搜索。

处理这些搜索的服务使用了 feathersjs。我认为构建羽毛查询的正确方法是:

  const params = {
    'params': {
      'query': {
        'product_id': ObjectId(productId)
      }
    }
  };

当我这样做时,参数会像这样到达服务器:

{ 
    query: { 
        product_id: { 
            id: '\\îĦ ;ÌúgÄ' 
        } 
    } 
}

如果我在客户端控制台记录值,这就是我看到的,所以我确信传输工作正常。

就像我说的,如果我将值的数据类型更改为字符串,我可以通过执行以下操作获得我期望的搜索结果:

  const params = {
    'params': {
      'query': {
        'product_id': productId
      }
    }
  };

我在这里很困惑,不知道还有什么可以尝试的。我确信这是可能的,因为我可以毫无问题地查询_id字段。任何帮助,将不胜感激。

标签: mongodbfeathersjs

解决方案


转换为内部类型应该发生在服务器上。这可以在类似于此问题的钩子中完成:

const { ObjectID } = require('mongodb');

module.exports = function() {
  return async context => {
    const { query = {} } = context.params;

    if(query. product_id) {
      query.product_id = new ObjectID(query._id);
    }

    return context;
  }
}

推荐阅读