【问题标题】:Mongoose filter data by object dynamic keyMongoose 通过对象动态键过滤数据
【发布时间】:2022-11-28 13:17:39
【问题描述】:

我有这个模式

 _id: 637c96369088ef201f1a0924,
  timestamp: 1669109220,
  date: '2022-11-19',
  rates: {
    ALU: 13.467843419485,
    IRD: 0.00025380710659898,
    IRON: 351.21258466244,
    LCO: 0.62255678407529,
    LEAD: 15.222537878788,
    NI: 1.3163568621028,
    RUTH: 0.1,
    TIN: 1.5148619686393,
    USD: 1,
    XAG: 0.047328809297387,
    XAU: 0.00057311770347523,
    XCU: 4.4456793553765,
    XPD: 0.00055066079295154,
    XPT: 0.001010101010101,
    XRH: 0.000074626865671642,
    ZNC: 10.092283737024
  },
  __v: 0
}  

我需要创建一个 API 来获取费率的键之一并返回值。 我试图在猫鼬上创建一个动态查询,但我一直得到一个空对象。

如果我这样写查询:

await Metals.findOne({ 'rates.RUTH' : { $ne: null }} ).sort({ date: -1 }).exec

我得到了正确的对象。但是如何将 RUTH 更改为我从客户端获得的动态密钥?

我试着做:

rates.${metalType} 但它也返回 null

【问题讨论】:

    标签: node.js database express object mongoose


    【解决方案1】:

    最终,我以这种方式解决了它:

    const q:any={ }
    q['rates.' + metalType as keyof object] = { $ne: null }
    await Metals.findOne( q ).sort({ date: -1 }).exec
    

    【讨论】:

      【解决方案2】:
      // here is the payload
      {
           "key":"RUTH"
      }
      
      //pass the key you want to search in DB like RUTH OR IRD etc.
      let key=req.body.key
      let find={}
      
      // here the key variable will hold the inner key of rates Object
      find["rates."+key]= { $ne: null }
      await Metals.findOne(find).sort({ date: -1 }).exec
      

      【讨论】:

        猜你喜欢
        • 2022-09-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-07-09
        • 2020-06-24
        • 2022-11-27
        • 1970-01-01
        相关资源
        最近更新 更多