在查找mongoose表达式中使用变量值

yi0zb3m4  于 2022-12-23  发布在  Go
关注(0)|答案(1)|浏览(103)

我使用了一个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);

如果我把数字手动工作,但不能使用,因为它必须是一个变量。有人知道这样做的方法吗?这是可能的?

jhiyze9q

jhiyze9q1#

当解析req.params时,它们总是被解析为string类型。由于您的ley字段是number类型,因此您必须首先解析它:

"$match": { 
  "ley": parseISO(req.params.ley, 10)     
}

相关问题