【问题标题】:how to use $objectToArray in mongoose or equivalent in Angular如何在猫鼬中使用 $objectToArray 或在 Angular 中使用等价物
【发布时间】:2021-09-26 10:45:44
【问题描述】:

我需要将 Angular 中的 mongo 文档转换为如下所示的键值对数组。 例如客户端文档recd时,需要将整个文档转换成如下所示的数组。

MongoDb 中有一个聚合选项 - $objectToArray

{ $objectToArray: { item: "foo", qty: 25 } }

结果:

[
   {
      "k" : "item",
      "v" : "foo"
   },
   {
      "k" : "qty",
      "v" : 25
   }
]
  1. 我在 Mongoose 文档中找不到这个?有货吗?

  2. 当从 Node API 接收文档时,有没有办法在 Angular 中实现这一点?

【问题讨论】:

    标签: angular mongodb mongoose


    【解决方案1】:

    是的,您可以在聚合管道中使用$objectToArray,它也可以在 mongoose 中使用,您可以尝试这样的查询

    Model.
      aggregate([{
            $project: { sampleField: { $objectToArray: "$array" } }
      }]).exec();
    

    如果你想将整个文档转换成一个数组,你可以试试这个管道

    db.collection.aggregate([
      {
        "$match": {
          _id: 1
        }
      },
      {
        // Add this stage in
        //case you want to exclude some keys
        "$project": {
          _id: 0
        }
      },
      {
        $project: {
          data: {
            $objectToArray: "$$ROOT"
          }
        }
      }
    ])
    

    这是在 Playground 中测试查询的链接:Mongo Playground

    如果你想在 Angular 中做,那么你可以试试这段代码

    let object = { item: "foo", qty: 25 }
    
    let result = Object.entries(object)
                       .map(itr => {
                          return {k: itr[0], v: itr[1]}
                        })
    
    console.log(result)

    【讨论】:

    • 非常感谢。我会尝试两者。对于 $objectToArray 方法,我如何将它应用于整个文档 - 而不是属性?这将在 Model.findById(id) 上。基本上,我会通过Id找到一个客户端,然后想将客户端Object转换为Array。
    • 你能分享一些示例数据、查询和预期结果吗?我将尝试相应地编写查询
    • const client = await Client.findById(id).select({ __v: 0 }).lean().exec() return client; 这是我的查询。结果是一个简单的对象(不是猫鼬模型)。到目前为止,我将使用您建议的 Angular 方法将返回的 Client 对象转换为数组。我的客户端模型有太多字段,因此不建议使用它。它是一个平面模型,没有嵌套属性。
    • 好的...我已经用查询和游乐场更新了我的答案
    猜你喜欢
    • 1970-01-01
    • 2017-05-09
    • 1970-01-01
    • 2019-01-24
    • 1970-01-01
    • 2021-06-19
    • 2010-10-03
    • 1970-01-01
    • 2017-06-21
    相关资源
    最近更新 更多