javascript - 将对象转换为 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循环将它们转换为对象数组,但速度很慢。
解决方案
您可以$map
在项目部分使用它,
$map
输入会话作为数组转换使用$objectToArray
,- 内部映射将对象键和值的数组转换为
$arrayToObject
db.collection.find(
{ user: "adam" },
{
user: 1,
sessions: {
$map: {
input: { $objectToArray: "$sessions" },
in: { $arrayToObject: [["$$this"]] }
}
}
})
推荐阅读
- reactjs - 将 Json 数据映射到反应中的下拉列表
- amazon-web-services - 在我的 AWS Deep Learning AMI EC2 实例上删除并重新安装 Anaconda,现在无法进入预配置的深度学习环境
- python-2.7 - 使用 PySpark 从表中识别分区键列
- php - 如何使用 php 代码在 GCE 上创建凭证(用于谷歌表格)?
- mysql - 将 SQL 查询结果卸载到变量而不是 shell 脚本上的文件
- javascript - 仅当使用 knex 唯一时才插入
- python - 显示警报时从窗口警报中删除警报文本
- r - 将 2 个数据框与重复列合并?
- c# - 我正在制作一个相册查看器,但 MULTISELECT 只得到一张照片。怎么做?
- c# - 保存并加载我的 listview/observablecolletion 到 txt