首页 > 解决方案 > 将对象转换为 MongoDB 中用户的数组

问题描述

我的集合中有多个用户,每个用户都有一个会话对象,如下所示

{
  user: 'adam',
  sessions: {
   key: some-value,
   key: some-value
  }
} 
{
  user: 'chris',
  sessions: {
   key: some-value,
   key: some-value
  }
} 

我根据用户名获取文档。让我们说我想要亚当的会议。

所以我运行db.collection.find({ user: 'Adam' })这给了我完整的亚当文件。现在我想要'Adam'的会话,但是会话对象应该被转换成这样的对象数组:

{
 user: 'adam'
 sessions : [ { key: value },{ key: value } ]
}

我想将用户的会话转换为一个对象,这意味着我想做$objectToArray但在特定的用户名上不是完整的集合。

只是我想要的用户。

解释:

我将节点作为后端运行,并且我有一个名为“getuserdata”的路由,它根据用户名获取特定用户的数据。因此,当我使用用户名 adam 到达该路线时,它将从数据库中获取数据。adam 的会话应该出现在一个对象数组中,如上所示,而不是数据库中的对象。

我在做什么

我在后端运行for-in循环将它们转换为对象数组,但速度很慢。

标签: javascriptdatabasemongodb

解决方案


您可以$map在项目部分使用它,

  • $map输入会话作为数组转换使用$objectToArray
  • 内部映射将对象键和值的数组转换为$arrayToObject
db.collection.find(
{ user: "adam" },
{
  user: 1,
  sessions: {
    $map: {
      input: { $objectToArray: "$sessions" },
      in: { $arrayToObject: [["$$this"]] }
    }
  }
})

操场


推荐阅读