【问题标题】:mongodb project map fields to return from query with wildcard使用通配符从查询返回的 mongodb 项目映射字段
【发布时间】:2021-06-05 20:56:38
【问题描述】:

我正在开发一个使用 Map 类型的架构的系统,类似于这样:

const Product = mongoose.model('Product', {
    name: String,
    data:{
        type:Map,
        of:String
    }
});

我正在尝试使用投影查询此集合中文档的某些部分:

Product.findOne({
    _id: req.params.id
}, {
   name:true,
   data.xy*
})

我只想获取数据中以 xy 开头的字段。你有什么提示吗?

【问题讨论】:

    标签: javascript node.js database mongodb mongoose


    【解决方案1】:

    由于 Mongoose 的映射类型将在 mongodb 中表示为嵌套对象,因此您可以使用 $objectToArray 进行转换,这将产生键值对数组,允许您通过以 xy 开头的键进行查询。比如:

    Product.aggregate([
      {
        $project: {
          data: {
            $objectToArray: "$data"
          }
        }
      },
      {
        "$unwind": "$data"
      },
      {
        $match: {
          "data.k": {
            $regex: "^xy"
          }
        }
      }
    ])
    

    这是一个关于 mongoplayground 的工作示例:

    https://mongoplayground.net/p/yCJLhzalOXI

    【讨论】:

      猜你喜欢
      • 2020-03-14
      • 1970-01-01
      • 2020-12-02
      • 1970-01-01
      • 1970-01-01
      • 2018-12-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多