【问题标题】:Push object in array and save into mongoDB using Js将对象推入数组并使用 Js 保存到 mongoDB
【发布时间】:2021-05-12 14:21:57
【问题描述】:

我想将我的详细信息作为 {userId:status} 保存到列表中,但我无法实现你能帮我解决我做错的地方吗?

if(campResp){
    let userId = await req.body.userId
    let status = req.body.status
    let userResp = await User.findOne({'id':req.body.userId}).exec()
    var data = {}
    data[userId] = status

    if(userResp){
        campResp.views = {}
        let visiterResp = await Campaign.find({'views':data})
        if(visiterResp.length>0){
            res.status(400).json({'status':false,'message':'Already watched'})
        }else{
            let pushResp = await campResp.views.push(data)
            if(pushResp){
                await campResp.save(async(err,response)=>{
                    if(response){
                        res.status(200).json({'status':true,'message':'campaign finished'})
                    }
                })
            }
        }
    }

架构很像,但仍然无法正常工作。

const mongoose = require('mongoose')

const campaignSchema = new mongoose.Schema({
    id: mongoose.Schema.Types.ObjectId,
    imageUrl:{
        required:true,
        type:String
    },
    link:{
        required:true,
        type:String
    },
    ownerId:{
        required:true,
        type:String
    },
    setting:{
        types:{
            type:String
        },
        bill:{
            type:String
        },
        dateTime:{
            type:String
        },
        expected_time:{
            type:String
        },
        expected_views:{
            type:String
        },
        expected_subs:{
            type:String
        },
        expected_likes:{
            type:String
        }
    },
    views:[{
        userId:Boolean
    }]
},{versionKey: false},{_id:false})

module.exports = mongoose.model('Campaign',campaignSchema)

作为响应它正在保存什么,我如何像 userId:status 一样保存到我的数据库中。 Ex "6789786722hgdvasnbad":true 如何达到同样的效果。

"views": [
            {
                "_id": "609b60a82445e32e8060b0c2"
            },
            {
                "_id": "609b60a82445e32e8060b0c4"
            }
        ]

【问题讨论】:

  • 关于数据库模型的一点评论,MongoDB 使用 _id 字段作为每个文档的 ID 字段并在后台生成它,您应该使用它而不是定义的 id 字段。
  • 哦,谢谢@Ayzrian,肯定会删除我自己的 id..

标签: node.js arrays mongodb rest


【解决方案1】:

您可能想使用mongoose.Schema.Types.Mixed

views:[{
    type: mongoose.Schema.Types.Mixed
}]

一个“万事如意”的 SchemaType。 Mongoose 不会对 混合路径。您可以使用 Schema.Types.Mixed 或 通过传递一个空的对象文字。以下是等价的。

【讨论】:

  • 哇,@Someone Special 它工作得很好,你能解释一下吗..为什么我的架构不起作用?
  • 因为您使用的是动态密钥。我认为猫鼬不允许这样做。但是,您可以使用mongoose.Schema.Types.Mixed,它允许任何数据类型。
  • ohhh 非常感谢您,先生,祝您早日/晚安,呵呵..
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-30
  • 2012-01-17
  • 1970-01-01
  • 1970-01-01
  • 2016-03-05
  • 2021-10-25
相关资源
最近更新 更多