【问题标题】:Mongoose update query keeps on inserting data with upsert true without updating and adding only 1 fieldMongoose 更新查询继续使用 upsert true 插入数据而不更新并仅添加 1 个字段
【发布时间】:2017-10-28 11:47:12
【问题描述】:

我正在使用 Mongoose 在 Node js 中登录 Facebook。我在更新数据时遇到问题。

这是我的方案文件

var mongoose = require('mongoose');


var Schema = mongoose.Schema;

 // Schema
var RegSchema = mongoose.Schema({
    UserName: String,
    UserEmail: String,
    userprofileImage : String,
    userId: String,
    reg_time : {
        type : Date, default: Date.now
    }
}, { collection: 'user' });

// Model
module.exports = mongoose.model('UserReg', RegSchema);

这是我放置更新和插入(如果未找到)的主文件

var express = require('express');
var mongoose = require('mongoose');
var bodyParser = require('body-parser');
var app = express();

app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true })); 



var UserReg = require('./myschema.js');

module.exports = function(userdetail, callback){
var bb;

                  var UserAdd = new UserReg({
                                "UserName": userdetail.username,
                                "UserEmail": userdetail.useremail,
                                "userId": userdetail.userId,
                                "userprofileImage": userdetail.userprofileImage
                            });

                    var userdetailchange = {
                                "UserName": userdetail.username,
                                "UserEmail": userdetail.useremail,
                                "userId": userdetail.userId,
                                "userprofileImage": userdetail.userprofileImage
                    };

                    // Update if found otherwise Insert
                    UserAdd.update({"userId":userdetail.userId },{ $set:userdetailchange, $setOnInsert:userdetailchange ,upsert:true, new: true, setDefaultsOnInsert: true}, function (err, data) {
                            if (err) {
                                callback(err);
                            } 
                                callback(data);                             
                    });

};

现在它继续在集合中插入用户数据,只有一个字段是 userId,也是一个默认的 _id 字段。如果找到匹配项或在集合中插入整个数据,请帮助我更新整个数据。任何帮助将不胜感激。

【问题讨论】:

    标签: node.js mongodb mongoose


    【解决方案1】:

    upsertnewsetDefaultsOnInsert 是选项,需要在单独的第三个参数中传递给update(记录在here):

    UserReg.update({
      "userId" : userdetail.userId     // query document
    }, {
      $set         : userdetailchange, // update document
      $setOnInsert : userdetailchange
    }, {
      upsert              : true,      // options
      new                 : true,
      setDefaultsOnInsert : true
    }, function (err, data) {
      ...
    });
    

    【讨论】:

    • 如果我将选项分开放置,那么它会给我错误。 callback.apply() 不是函数。
    • @noobcode 我认为您的意思是 UserReg.update() 而不是 UserAdd.update(),请参阅编辑。
    • 谢谢罗伯特。它现在工作。非常感谢你。
    猜你喜欢
    • 2021-05-31
    • 2013-09-30
    • 2015-10-01
    • 1970-01-01
    • 2016-03-04
    • 1970-01-01
    • 1970-01-01
    • 2017-11-26
    • 2020-01-12
    相关资源
    最近更新 更多