我使用了一个mongoose模型来获取文档,并添加了一个聚合来与其他集合“连接”,真实的的问题是当我使用聚合时,我无法过滤“原始”集合中的文档(类似于findOne()),所以当我使用聚合函数时,我得到了所有文档,但我只需要1。
即(这仅是所述点的示例)
Collection A = {id,name,birthdate,dni}
Collection B = {avatar,dni.....}
a.aggregate([ '$lookup': {
'from': 'avatars',
'localField': 'dni',
'foreignField': 'dni',
'as': 'aditionalinfo'
} ])
这将为每个文档生成一个完整的集合A +来自B的additionalinfo对象,但是应该从集合A中获取一个人的附加数据(additionalinfo)。我的意思是,我需要将一个文档与另一个集合中的相应文档“连接”在一起。
这是我最后尝试的代码
let ley = await leyes.aggregate([
{
'$lookup': {
'from': 'digessituacion',
'localField': 'idsituacio',
'foreignField': 'idsituacio',
'as': 'situacion'
}
}, {
'$lookup': {
'from': 'digescategoria',
'localField': 'catego',
'foreignField': 'catego',
'as': 'categoria'
}
},
{
'$match': {
'ley': 8996 // this is the number which I need to set variable cause is passed from params
}
}]);
这是架构
import { Schema, model } from "mongoose";
const leyesSchema = new Schema(
{
ley: Number,
resumen: String,
notas: String,
txtley: String,
catego: String,
detcatego: String,
idsituacio: Number,
promulgada: Date,
sancionada: Date,
},
{ timestamps: false, versionKey: false }
);
export default model("leyes", leyesSchema);
以及需要“加入”的集合的架构
import { Schema, model } from "mongoose";
const digessituacionSchema = new Schema(
{
idsituacio: Number,
situacion: String,
},
{ timestamps: false, versionKey: false }
);
export default model("digessituacion", digessituacionSchema);
如果我把数字手动工作,但不能使用,因为它必须是一个变量。有人知道这样做的方法吗?这是可能的?
1条答案
按热度按时间jhiyze9q1#
当解析
req.params
时,它们总是被解析为string
类型。由于您的ley
字段是number
类型,因此您必须首先解析它: