【问题标题】:Using same column with different valus in mongodb在 mongodb 中使用具有不同值的同一列
【发布时间】:2020-07-07 10:50:44
【问题描述】:

您好,我尝试在 mongoose 中多次使用相同的列名,但它显示不同的输出。相反,我需要预期的输出,有什么方法可以实现它。谁能帮助我

const mongoose = require('mongoose')
mongoose.connect('----------------------------------------------', 
{useNewUrlParser:true,useCreateIndex:true,useUnifiedTopology:true})
const wavicle = mongoose.model('Datasetlist',{
  Dataset:[{
    id:Number,
    dataset:String,
    parameter: [{
      Name:String,
      Name:String,
      Name:String,
      Name:String,
      Name:String,
      Name:String
    }]
  }]
})

const me = new wavicle({
  Dataset:[{
    id:1,
    dataset:'Daily Food Report',
    parameter: [{
      Name:'StoreName',
      Name:'Dates',
      Name:'TransDesc',
      Name:'Amount',
      Name:'credit'
    }]
  }]
})

me.save().then(()=>{
console.log(me)
}).catch(()=>{
console.log(error)
}) 

输出:

_id:5f044c0165a79639745ce2a1
Dataset:Array
0:Object
_id:5f044c0165a79639745ce2a2
id:1
dataset:"Daily Food Report"
parameter:Array
0:Object
_id:5f044c0165a79639745ce2a3
Name:"credit"
__v:0

但我需要输出为

预期输出:

dataset:[
{id:1,dataset:'Daily Food Report',parameter: [
{name:'Store Name'},
{name:'Dates'},
{name:'TransDesc'},
{name:'Amount'},
{name:'credit'},
{name:'Total'} 
]

【问题讨论】:

  • 你不应该有相同的列名。你试过删除其中一个吗?
  • 我需要为列名插入许多值是否可以??

标签: node.js arrays mongodb


【解决方案1】:

这里有3个问题:

  1. 架构定义:虽然它实际上以定义多个具有相同名称的键的方式工作,但最后这些键将相互覆盖,您最终会得到一个只有一个键的对象。做法如下:
{
  Dataset:[{
    id:Number,
    dataset:String,
    parameter: [{
      Name: String // be carful with the case, your expect the output to have the key "name", but you defined as "Name", the keys are case sensitive
    }]
  }]
}
  1. 文档创建:如第一期所述。如果您定义多个具有相同名称的键,它们将相互覆盖,那么您最终可能会在这样的数组中得到一个对象:parameters: [{ Name:'credit' }]。正确的做法是单独写对象
const me = new wavicle({
  Dataset:[{
    id:1,
    dataset:'Daily Food Report',
    parameter: [{
      Name:'StoreName'
    },{
      Name:'Dates'
    },{   
      Name:'TransDesc'
    },{
      Name:'Amount'
    },{
      Name:'credit'
    }]
  }]
})

  1. 日志记录:当您执行console.log(me) 时。它可能不会打印所有嵌套结构,所以你看到的只是Array,而里面有嵌套对象。您应该改为执行以下操作
console.dir(me, { depth: null })

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-02-14
    • 1970-01-01
    • 2015-07-17
    • 2012-05-25
    • 2017-04-23
    • 2019-05-15
    • 1970-01-01
    • 2019-05-31
    相关资源
    最近更新 更多