【问题标题】:Mongodb/mongoose insert is not a functionMongodb/mongoose 插入不是函数
【发布时间】:2016-10-08 10:09:53
【问题描述】:

我的插入不起作用,我收到错误错误:

Token.insert 不是函数

var Token = module.exports = mongoose.model('tokens', tokenSchema);

//error
module.exports.saveToken = function(owner_id, token, callback){
    console.log(owner_id,token);
    Token.insert({"owner":owner_id,"token":token},callback);
}
//working
module.exports.getAllTokens = function(owner_id, callback){
    Token.find({"owner":owner_id},callback);
}

【问题讨论】:

  • 这个文件中定义了Token 吗?它是如何传递给它的
  • @MukeshSharma 更新了我的问题
  • 请添加 tokenSchema 定义,并输入确切的问题。你是说: Token.insert 不是一个函数。我们 - 帮助您修复它,但在我得到它之后,您需要将令牌插入令牌数组。所以请解决你的问题。

标签: javascript node.js mongodb mongoose


【解决方案1】:

检查此代码示例,它应该可以按您的需要工作。

我在这里没有看到任何不理解的部分。

在cmets中提问,不明白可以解释。

var tokenSchema = mongoose.Schema({
  owner: { 
    type: 'String',
    required: true,
    index: {
      unique: true
    }
  }, 
  token: {
    type: ['String'],
    default: []
  }
});

var Token = module.exports = mongoose.model('tokens', tokenSchema);

//save token, if token document exist so push it in token array and save
module.exports.saveToken = function(owner_id, token, callback){
    Token
      .findOne({owner: owner_id})
      .exec(function(err, tokenDocument) {
        if(tokenDocument) {
          if(tokenDocument.token.indexOf(token) > -1) { // found that token already exist in document token array
            return callback(null, tokenDocument); // don't do anything and return to callback existing tokenDocument
          }

          tokenDocument.token.push(token);
          tokenDocument.save(callback);
          return; // don't go down, cuz we already have a token document
        }

        new Token({owner: owner_id, token: [token]}).save(callback); // create new token document with single token in token array
    });
}

//get all tokens by owner_id
module.exports.getAllTokens = function(owner_id, callback){
    Token
      .findOne({owner: owner_id})
      .exec(function(err, tokenDocument) {
        callback(err, tokenDocument.token);
      });
}

【讨论】:

  • 这行不通,忘了提到我的架构,令牌是一个数组。像这样var tokenSchema = mongoose.Schema({ "owner" : { type:String }, "token" : [] });
  • 您在任何地方都没有提到架构。查看我的答案中的新变化
  • 问题是如果所有者相同,它仍然会创建另一组插入。如果所有者相同,只是推送令牌,而不是复制整个文档怎么办?
  • checkout“更好的解决方案”,如果存在则由所有者获取令牌并推送新令牌并保存。否则创建带有单个标记的新记录。
  • tq 非常感谢您的帮助号码!
【解决方案2】:

你可以使用:

let newvalue = new Token({"owner":owner_id,"token":token});
newvalue.save();

【讨论】:

  • save 与 insert verus create 有什么不同?
  • Mongoose 没有插入 API 真是愚蠢,因为那是原生 API,我猜 Model.create() 代替了 Model.insert()
【解决方案3】:

在这里我定义了为什么他们没有找到 insertMany

通常,我们创建一个实例来将文档保存在数据库中,如下所示:

const instance = new Model(data);

然后我们点击保存查询

instance.save(data).then().catch()

但是当我们谈到 insertMany 部分时,无需创建任何实例。您可以通过 Model

直接插入所有条目

例如。

Modal.insertMany(data).then().catch()

【讨论】:

    猜你喜欢
    • 2021-07-18
    • 2019-02-20
    • 2022-11-07
    • 2018-06-14
    • 2015-10-01
    • 2018-05-14
    • 2017-12-22
    • 1970-01-01
    • 2016-04-01
    相关资源
    最近更新 更多