javascript - 使用 mongoose 中现有集合的一部分

标签 javascript node.js mongodb mongoose

我正在致力于将统计计算从 php 迁移到 node.js。之前的开发者为每个客户端制作了一个集合,并且所有集合并不遵循相同的架构。

但是,我需要计算的部分在所有集合上都是相同的,所以我想做的是像这样的“不完整”模式:

S_logs.web =  new mongoose.Schema({
        /*
        user_ip     : String,
        user_id     : String,
        user_agent  : String,
        */
        canal_id    : String,
        theme_id    : String,
        video_id    : String,
        time        : Number,
        /*
        action      : String,
        is_newuser  : String,
        operator    : String,
        template    : String,
        catalogue   : String,
        */
        referer     : String,
        /*
        from        : String,
        request     : String,
        smil        : String,
        smil_path   : String
        */
    }, {
        collection: db_web
});

M_logs.web = mongoose.model(db_web, S_logs.web, db_web);

注释字段是仅存在于(以该名称或形式)一个集合中的字段。未注释的字段是我需要的字段,并且存在于所有集合中。

如果所有字段都未注释,则一切正常,但是当我注释掉这些字段时,即使我给出了集合的名称,似乎也无法识别集合。

我是否缺少允许我使用此类模式的标志/选项?或者我注定要为每个客户制作“所有字段”架构?

编辑:

当我谈到“不完整”模式时,更多的是“仅选择我知道存在于我不知道的所有字段中间的那些字段”,我不需要将数据放入集合中,这就是为什么我觉得奇怪MongoDB 没有这样的东西。

最佳答案

Mongoose 可以以“无模式”模式运行。这会产生一些后果,例如缺少每个字段的访问器,并且需要“显式”指定这些:

 S_logs.web = new Schema({}, { strict: false });

 M_logs.web = mongoose.model( db_web, S_logs.web, db_web );

这意味着当您访问文档中的“字段/属性”时,您需要使用 .get() 方法而不是自动生成的访问器,例如:

 M_logs.web.find({}, function(err,logs) {
     logs.forEach(function(log) {
         var canal_id = log.get("canal_id");
         // do something with that value
     });
 });

如果所有文档不符合一致的模式模式,那么这很有用,但要理解,在处理这种级别的“多态性”时,自动生成的对象不能具有相同的方便的接口(interface),因为它不被 Mongoose 。

关于javascript - 使用 mongoose 中现有集合的一部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25605406/

相关文章:

javascript - 网页不透明度?

javascript - 无法访问 Django + Angular 项目中的服务器媒体文件

node.js - 使用 TypeScript 配置 React Native 时出错

javascript - 如何检测 webkitSpeechRecognition 是否真的在浏览器中工作

javascript - Firefox 上奇怪的蓝色边框

php - 在 php 中处理实时通知的最佳方法是什么?

c++ - 在类中使用 libuv

javascript - AngularJS - 与 mongodb 的交互

node.js - Mongodb:仅当该对象的元素唯一时才将对象插入到数组中

node.js - Mongoose:分配类型为 'array of Strings' 的字段