如何使用 mongoose 更新 mongodb 中的对象?

Posted

技术标签:

【中文标题】如何使用 mongoose 更新 mongodb 中的对象?【英文标题】:How to update a object in mongodb using mongoose? 【发布时间】:2015-12-12 14:37:54 【问题描述】:

我有一个架构:

exports.participant = function(mongodb)
  var participantSchema =  new mongoose.Schema(
   uniqueid: type: String, unique: true,
   channel: String,
   conference: String,
   calleridnum: String,
   calleridname: String,
   event: String,
   status :  type: Boolean, default: 0 
, collection: 'participants');

  var participant = mongodb.model('Participant', participantSchema);
  return participant;

我已经尝试过how to update a object in mongodb via mongoose,但它仍然不适合我。

我想将状态更新为 1

我在这里调用更新代码。 .

我的架构的文件位置是:../models/app.js

我更新的文件位置是:../lib/update.js

这是我的更新代码。 .

var appInit = require('../app');
var logger = appInit.logger;
var basedir = appInit.basedir;
var connection = appInit.connection;


var mongodb = appInit.mongodb;

var handleAsteriskAmi = require(basedir+'/lib/handleasteriskami');
var asteriskAmi = new handleAsteriskAmi();

var handleHttpProc = require(basedir+'/lib/handlehttpproc');
var httpProc = new handleHttpProc();

function handleSocketio()
  this.init = function(io)
    io.sockets.on('connection',function(socket)
      if(socket)
        logger.info("socket.io is connected");
      
      socket.on('disconnect', function () 
        logger.error("Socket.io is disconnected");
      );
      socket.on('action', function(data)
        var result = JSON.parse(JSON.stringify(data));
        asteriskAmi.listenActionConfbridge(result,function(response)
          logger.info(JSON.stringify(response));
          if(response.event=="originate")
                  io.sockets.emit("response",response);
          
          if(response.event=="confbridgemute" || response.event=="confbridgeunmute")
                  io.sockets.emit("response",response);
                  mongodb.model("Participant").update(
                  channel: response.channel,
                  $set: status: 1
                  );
          
          if(response.event=="confbridgelock" || response.event=="confbridgeunlock")
                  io.sockets.emit("response",response);
          
        );
      );

    );

【问题讨论】:

你能告诉我们你在哪里调用更新代码,你在哪里创建mongodb mongoose 对象? 你好@chridam。我更新我的问题。 . 【参考方案1】:

我相信您需要在../models/app.js 的参与者函数中传入一个猫鼬对象,然后您可以使用该对象将participantSchema 转换为模型。因此,在您的../models/app.js 中,您可以将participant 函数实现为

var mongoose = require('mongoose');
var Schema = mongoose.Schema;
exports.participant = function()
    var participantSchema =  new Schema(
        uniqueid: type: String, unique: true,
        channel: String,
        conference: String,
        calleridnum: String,
        calleridname: String,
        event: String,
        status :  type: Boolean, default: 0 
     , collection: 'participants');

    var participant = mongoose.model('Participant', participantSchema);
    return participant;

在您的../lib/update.js 中调用参与者模型:

var appInit = require('../app');
var Participant = appInit.participant();
Participant.update(
    channel: response.channel,
    $set: status: 1
);

【讨论】:

以上是关于如何使用 mongoose 更新 mongodb 中的对象?的主要内容,如果未能解决你的问题,请参考以下文章

MongoDB:如何使用 Mongoose 添加或更新子文档?

如何使用 MongoDB/Mongoose 中的先前值更新字段 [重复]

如何在 mongodb/mongoose 的嵌套数组中检查是不是存在并更新对象?

如何在 mongoose 和 mongodb 中更新嵌套模型

MongoDB(Mongoose)更新数组数组中的元素

如何在 Mongoose 中更新/更新文档/数据? Passport MongoDB、Express、AngularJS、Nodejs