FeathersJs LEFT 加入另一个 table (MongoDb)
FeathersJs LEFT join another table (MongoDb)
我有一个服务列表模型,例如
price: { type: Number, required: true, min: 0, default: 0 },
itemId: {
type: mongooseClient.Schema.Types.ObjectId,
ref: 'items',
required: true,
},
我正在用
做一个 fastResolve
joins: {
items: () => async (instance, context) => {
if (instance && instance.itemId) {
const item = await context.app
.service('items')
.get(instance.itemId);
instance.item = item;
}
return context;
},
所以最后当我查找列表时,我得到了项目对象。
虽然我可以轻松查询 price (listings?price%5B%24lt%5D=5000)
等字段
我应该如何查询物品的内部字段,比如重量? (在查找列表时)
可以在前端直接传一个$populate
查询
例如:?$populate=itemId
,这里的“itemId”是数据模型的键,它被称为项目模型。
如果您想在后端填充,您可以为此创建一个自定义挂钩。
// src/hooks/setDefaultQuery.js
const setDefaultQuery = (fieldName, defaultValue) => (context) => {
const { params } = context;
const { query } = params;
if (typeof query[fieldName] === 'undefined') context.params.query[fieldName] = defaultValue;
return context;
};
module.exports = setDefaultQuery;
在钩子上,你可以像这样使用setDefaultQuery
{
before: {
all: [authenticate('jwt')],
find: [setDefaultQuery('$populate', "itemId")],
get: [],
create: [],
update: [],
patch: [],
remove: [],
},
}
有关查询的更多信息,请查看下面的link
https://docs.feathersjs.com/api/databases/querying.html
const populate = (context) => {
const stringList = [
'vehicleId',
'userId',
'locationId',
];
context.params.query['$populate'] = {
path: `${stringList.join(' ')}`,
populate: [
{
path: 'modelId',
model: 'models',
populate: {
path: 'makeId',
model: 'makes',
},
},
{
path: 'userId',
model: 'users',
},
],
};
return context;
};
根据之前的回答进行了研究,最终编写了以下钩子作为解决方案,用于 FeathersJs 中的嵌套填充
我有一个服务列表模型,例如
price: { type: Number, required: true, min: 0, default: 0 },
itemId: {
type: mongooseClient.Schema.Types.ObjectId,
ref: 'items',
required: true,
},
我正在用
做一个 fastResolvejoins: {
items: () => async (instance, context) => {
if (instance && instance.itemId) {
const item = await context.app
.service('items')
.get(instance.itemId);
instance.item = item;
}
return context;
},
所以最后当我查找列表时,我得到了项目对象。 虽然我可以轻松查询 price (listings?price%5B%24lt%5D=5000)
等字段我应该如何查询物品的内部字段,比如重量? (在查找列表时)
可以在前端直接传一个$populate
查询
例如:?$populate=itemId
,这里的“itemId”是数据模型的键,它被称为项目模型。
如果您想在后端填充,您可以为此创建一个自定义挂钩。
// src/hooks/setDefaultQuery.js
const setDefaultQuery = (fieldName, defaultValue) => (context) => {
const { params } = context;
const { query } = params;
if (typeof query[fieldName] === 'undefined') context.params.query[fieldName] = defaultValue;
return context;
};
module.exports = setDefaultQuery;
在钩子上,你可以像这样使用setDefaultQuery
{
before: {
all: [authenticate('jwt')],
find: [setDefaultQuery('$populate', "itemId")],
get: [],
create: [],
update: [],
patch: [],
remove: [],
},
}
有关查询的更多信息,请查看下面的link https://docs.feathersjs.com/api/databases/querying.html
const populate = (context) => {
const stringList = [
'vehicleId',
'userId',
'locationId',
];
context.params.query['$populate'] = {
path: `${stringList.join(' ')}`,
populate: [
{
path: 'modelId',
model: 'models',
populate: {
path: 'makeId',
model: 'makes',
},
},
{
path: 'userId',
model: 'users',
},
],
};
return context;
};
根据之前的回答进行了研究,最终编写了以下钩子作为解决方案,用于 FeathersJs 中的嵌套填充