【问题标题】:How to listen to changes in a document of some collection in mongodb如何监听mongodb中某个集合的文档中的变化
【发布时间】:2012-12-21 15:28:21
【问题描述】:

我正在使用socket.io进行服务器和客户端之间的实时通信,所以我想监听特定文档中的更改以将在线列表更新到客户端
这是我的集合架构:

var registerCompanySchema = new Schema({
              sn : { type: Number, unique:true }
              , companyName: String
              , employees:[String],
               companyId:{type:Number,unique:true},
               onlineEmployees:[String]  //uname
          });


我正在使用数组“onlineEmployees”来存储当前在线员工的用户名
我是 mongoDB 的新手....请提供一些详细信息以及您的答案。

【问题讨论】:

    标签: node.js mongodb socket.io real-time-updates


    【解决方案1】:

    this question 所述,观看oplog 可能是您最好的选择。

    如果您使用的是mongoskin,您可以尝试this example from their wiki 的变体:

    skin = require "mongoskin"
    db = skin.db "localhost:27017/local"
    
    #Cursor on oplog (a capped collection) which maintains a history for replication
    #oplog can be used only when replication is enabled
    # Use oplog.rs instead of oplog.$main if you are using replica set
    
    oplog = db.collection "oplog.$main"
    cursor = oplog.find({'ns': "icanvc.projects"},{tailable: yes, awaitData: yes})
    
    #Using cursor.nextObject will be slow
    cursor.each (err, log)->
        console.error err if err
        console.log log if not err
    

    【讨论】:

    • 感谢您的帮助....我正在使用 mongolab 进行 mongodb 托管,因此当 db 在 localhost 中时可以获取操作日志,但是在我的情况下呢..?
    • 您需要管理员权限,我们在某些计划中确实提供了这些权限。您可以写信给我们 support@mongolab.com 讨论选项。
    猜你喜欢
    • 2012-03-30
    • 2020-10-27
    • 1970-01-01
    • 2020-05-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多