如何在feathersjs中查询普通字段的ObjectIds?

How to query for ObjectIds in feathersjs that are normal fields?

我有一组产品变体,即同一产品的不同版本。有一个单独的产品系列。 Variant documents有一个product_id字段,保存的是product collection中对应product document的ObjectId;它的类型是 ObjectId。该字段的所有搜索 return 0 条记录。如果我把类型改成String,就可以搜索成功了。

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

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

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

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

这就是我 console.log 在客户端看到的值,所以我确信传输工作正常。

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

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

我被难住了,不知道还能尝试什么。我确信这是可能的,因为我可以毫无问题地查询 _id 字段。任何帮助将不胜感激。

到内部类型的转换应该发生在服务器上。这可以在钩子 similar to the one from this issue:

中完成
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;
  }
}