首页 > 解决方案 > 对象创建错误(后端控制器)

问题描述

我要疯了,因为我已经尽一切可能。这是交易:我正在创建一个不和谐的机器人,它记录和存储 2 个用户活动(当他加入和离开语音频道时)。

我正在使用 MongoDB 和 Mongoose ODM。这是ActivitySchema模型:

const mongoose = require("../database")

const ActivitySchema = new mongoose.Schema({
    user: {
        id: String,
        name: String
    },
    from: {
        id: String,
        name: String
    },
    to: {
        id: String,
        name: String
    },
    timestamp: {
        type: Date,
        default: new Date()
    }
})

const Activity = mongoose.model("Activity", ActivitySchema)

module.exports = Activity

这是前 5 行文档(出于隐私原因,我更改了用户名):

[
   {
      "user":{
         "id":"258626789922832385",
         "name":"User 1"
      },
      "from":{
         "id":null,
         "name":null
      },
      "to":{
         "id":"712011063867998349",
         "name":"OH GUI OH BOIII II"
      },
      "timestamp":"2021-01-24T16:52:02.999Z",
      "_id":"600da5e744dfcb399410fe53",
      "__v":0
   },
   {
      "user":{
         "id":"338750711393157121",
         "name":"User 2"
      },
      "from":{
         "id":null,
         "name":null
      },
      "to":{
         "id":"712011063867998349",
         "name":"OH GUI OH BOIII II"
      },
      "timestamp":"2021-01-24T16:52:02.999Z",
      "_id":"600da5ea44dfcb399410fe54",
      "__v":0
   },
   {
      "user":{
         "id":"258626789922832385",
         "name":"User 1"
      },
      "from":{
         "id":"712011063867998349",
         "name":"OH GUI OH BOIII II"
      },
      "to":{
         "id":null,
         "name":null
      },
      "timestamp":"2021-01-24T16:52:02.999Z",
      "_id":"600da70244dfcb399410fe56",
      "__v":0
   },
   {
      "user":{
         "id":"258626789922832385",
         "name":"User 1"
      },
      "from":{
         "id":null,
         "name":null
      },
      "to":{
         "id":"712011063867998349",
         "name":"OH GUI OH BOIII II"
      },
      "timestamp":"2021-01-24T16:52:02.999Z",
      "_id":"600da70844dfcb399410fe57",
      "__v":0
   },
   {
      "user":{
         "id":"162677448897462272",
         "name":"User 3"
      },
      "from":{
         "id":null,
         "name":null
      },
      "to":{
         "id":"712011063867998349",
         "name":"OH GUI OH BOIII II"
      },
      "timestamp":"2021-01-24T17:13:40.309Z",
      "_id":"600daafccb560a2e841b25c2",
      "__v":0
   }
]

然后我创建了一个函数,它应该返回具有以下属性的对象数组:id, users (users connected), user (who joined or left), type (join or leave) and timestamp.

const Activity = require("../models/activity.model")

async function getUsage(req, res) {
    try {
        const activities = await Activity.find()

        let state = []
        let users = []
        let id = 0

        for (let i = 0; i < activities.length; i++) {
            id++
            const activity = activities[i]
            if (activity.from.id !== null && activity.to.id !== null) continue

            const type = activity.from.id === null || activity.to.id !== null ? "join" : "leave"

            if (type === "join" && !users.find(user => user.id === activity.user.id)) {
                users.push({ id: activity.user.id, name: activity.user.name })
            }

            if (type === "leave") {
                users = users.filter(user => user.id !== activity.user.id)
            }

            state.push({
                id,
                users,
                user: activity.user,
                type,
                timestamp: activity.timestamp
            })
        }

        return res.send(state)
    } catch (error) {
        return res.send({ error: "Error" })
    }
}

module.exports = { getUsage }

第一个元素有一个问题:

[
   {
      "id":1,
      "users":[
         {
            "id":"258626789922832385",
            "name":"User 1"
         },
         {
            "id":"338750711393157121",
            "name":"User 2"
         }
      ],
      "user":{
         "id":"258626789922832385",
         "name":"User 1"
      },
      "type":"join",
      "timestamp":"2021-01-24T16:52:02.999Z"
   },
   {
      "id":2,
      "users":[
         {
            "id":"258626789922832385",
            "name":"User 1"
         },
         {
            "id":"338750711393157121",
            "name":"User 2"
         }
      ],
      "user":{
         "id":"338750711393157121",
         "name":"User 2"
      },
      "type":"join",
      "timestamp":"2021-01-24T16:52:02.999Z"
   }
]

根据我的数据,应该是:

[
   {
      "id":1,
      "users":[
         {
            "id":"258626789922832385",
            "name":"User 1"
         }
      ],
      "user":{
         "id":"258626789922832385",
         "name":"User 1"
      },
      "type":"join",
      "timestamp":"2021-01-24T16:52:02.999Z"
   },
   {
      "id":2,
      "users":[
         {
            "id":"258626789922832385",
            "name":"User 1"
         },
         {
            "id":"338750711393157121",
            "name":"User 2"
         }
      ],
      "user":{
         "id":"338750711393157121",
         "name":"User 2"
      },
      "type":"join",
      "timestamp":"2021-01-24T16:52:02.999Z"
   }
]

它在以下元素中变得越来越奇怪!

请帮忙 :)

标签: javascriptnode.jsmongodbmongoosediscord

解决方案


推荐阅读