如何在模式中未存在的MongoDB中的现有文档中定义新字段? (Node.js)

时间:2019-08-15 00:56:11

标签: javascript node.js mongodb

我正在使用MongoDB做一个不和谐的机器人,我想将一些特定于用户的字段添加到不在模式中的MongoDB中已经存在的文档中。我打算添加很多数据,我希望根据用户为提高效率而自动添加数据。

我尝试使用findOneAndUpdate设置新字段及其值。我将设置“ strict”设置为false,将“ upsert”设置为true。我后来保存了。我确实看到它是在Compass社区应用程序中添加的,但是当我稍后尝试调用该字段时,它是未定义的,我假设是因为它不在架构中。我想知道是否可以解决此问题,或者是否有任何错误。

Users.findOneAndUpdate({
  userID: message.author.id
}, {
  $set: {
    "xp": xpToBeAdded,
    "level": 0
   }
}, {
  strict: false,
  upsert: true
}, async (err, userAdd) => {
  await userAdd.save().catch(err => console.log(err))
})

原始用户架构:

const mongoose = require("mongoose");

const userSchema = mongoose.Schema({
    userID: String,
    serverID: Array,
    userTag: String,
    username: String,
    dbCreatedAt: Number,
    dbCreatedAtDate: String
}, {strict: false})

module.exports = mongoose.model("User", userSchema)

1 个答案:

答案 0 :(得分:0)

如果您在罗盘中看到了正确的值,但是没有返回,那可能是因为您的模型不知道这些属性。尝试将模型更新为此:

const mongoose = require("mongoose");

const userSchema = mongoose.Schema({
    userID: String,
    xp: Number,
    level: Number,
    serverID: Array,
    userTag: String,
    username: String,
    dbCreatedAt: Number,
    dbCreatedAtDate: String
}, {strict: false})

module.exports = mongoose.model("User", userSchema)

正在发生的事的示例(注意,即使您将sex作为值传递,也不会被记录):

class User {
	constructor(user) {
  	this.name = user.name;
    this.age = user.age;
  }
}

const user1 = new User({name: 'Frank', age: 22, sex: 'M'});
console.log(user1);