【问题标题】:how to access elements that are dynamic (mongodb node js)?如何访问动态元素(mongodb node js)?
【发布时间】:2021-02-23 14:17:08
【问题描述】:

架构:Login.js

const mongoose = require('mongoose');
const Schema = mongoose.Schema;

const LoginSchema = new Schema({
  uname: {
    type: String,
    required: true
  },
  pass: {
    type: String,
    required: true
  },
  feeds : [Schema.Types.Mixed]
}, {strict: false});

module.exports = Login = mongoose.model('login', LoginSchema);

现在在 js 代码中我正在这样做:

const newLogin = new Login({
        uname: 'guest',
        pass: 'guest',
        'random_key': 'random_value'
      });
    console.log(newLogin);
    await newLogin.save();

Login.find({uname: req.body.uname}, function (err, logins) {
            console.log("cool: ",logins[0].uname);
        }

    });

它有效!控制台显示:

docker-node-mongo | MongoDB Connected
docker-node-mongo | { feeds: [],
docker-node-mongo |   _id: 5fab94031fd61f00121e0a13,
docker-node-mongo |   uname: 'guest',
docker-node-mongo |   pass: 'guest',
docker-node-mongo |   random_key: 'random_value' }
cool:  guest

但如果它在 js 文件中键入:(架构中未提及的属性(本质上是动态的)):

const newLogin = new Login({
        uname: 'guest',
        pass: 'guest',
        'random_key': 'random_value'
      });
    console.log(newLogin);
    await newLogin.save();

Login.find({uname: req.body.uname}, function (err, logins) {
            console.log("cool: ",logins[0].random_key);
        }

    });

控制台显示:

docker-node-mongo | MongoDB Connected
docker-node-mongo | { feeds: [],
docker-node-mongo |   _id: 5fab94031fd61f00121e0a13,
docker-node-mongo |   uname: 'guest',
docker-node-mongo |   pass: 'guest',
docker-node-mongo |   random_key: 'random_value' }
cool:  undefined

这里的问题是 console.log("cool": login[0].random_key) 中的值显示未定义。它是模式中未提及的属性。解决这个问题的方法是什么?如何输出这个属性? 谢谢。

【问题讨论】:

  • 考虑查看 github.com/Automattic/monk,这是一个用于 node.js 的 MongoDB API,它是 mongo shell 的更直接端口。它不采用任何模式,这可能对您(诚然奇怪的)动态模式用例更有用。

标签: javascript html mongodb mongoose


【解决方案1】:

它在console.log(newLogin) 而不是在await newLogin.save(); 之后输出 random_key 的原因是,在保存信息时,密钥 random_key 未在您的架构。请把它改成这样;

const mongoose = require('mongoose');
const Schema = mongoose.Schema;

const LoginSchema = new Schema({
  uname: {
    type: String,
    required: true
  },
  pass: {
    type: String,
    required: true
  },
  random_key:  {
    type: String,
    required:  true
  },
  feeds : [Schema.Types.Mixed]
}, {strict: false});

module.exports = Login = mongoose.model('login', LoginSchema);

参考Schema defines your database

【讨论】:

  • 问题不在于。将来我需要添加随机属性。这就是我选择 mongodb overmysql 的原因。 Bcuz mongodb 不是结构化的。它可以具有动态属性。所以我想创建一个新属性并访问它
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-11-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多