如何在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;
}
}
我有一组产品变体,即同一产品的不同版本。有一个单独的产品系列。 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;
}
}