当前位置: 首页 > 知识库问答 >
问题:

用mongoose包装数据

孔棋
2023-03-14

我有3个不同模式的文件。用户有很多笔记本,笔记本有很多笔记。模式示例

用户架构:

var mongoose    = require('mongoose'),
    Schema      = mongoose.Schema;

var User = new Schema({
    username:  { type: String, require: true, index: { unique: true }, trim: true},
    password:  { type: String, require: true, select: true },
    age: { type: Number, min: 0 },
    firstname: String,
    secondname: String,
    token: String,
    role: String,
    city: String, 
    rememberMe: Boolean
});

module.exports = mongoose.model('User', User);

笔记本架构:

var mongoose        = require('mongoose'),
    Schema          = mongoose.Schema,
    Note            = require('./note'),
    User            = require('./user');

var NoteBook = new Schema({
    creator: { type:Schema.ObjectId, ref:"User"},
    name: String,
    description: String
}); 

NoteBook.methods.getAllNotes = function(cb) {

    Note.find({notebook: this}, function(err, noteList){
        cb(noteList);
    });
};

module.exports = mongoose.model('NoteBook', NoteBook);

注意模式:

var mongoose=require('mongoose'),Schema=mongoose。图式;

var NoteSchema = new Schema({
    notebook: { type: Schema.Types.ObjectId, ref: 'NoteBook'},
    name: String,
    description: String,
    content: String
});

module.exports = mongoose.model('Note', NoteSchema);

我得到了请求userId,我需要打包所有这行数据。使用笔记本电脑的用户,以及使用笔记本电脑的用户。我玩过这样的游戏:

函数getTree(req,res){

    var data = [];

    User.findOne({_id: req.body.userId}, function(err, user) {

        NoteBook.find({creator: user._id}, function(err, notebookList) {

            for (var idx in notebookList) {

                Note.find({notebok: notebookList[idx]._id}, function(err, noteList) {

                    var children = [];

                    for (var noteIdx in noteList) {

                        children.push({
                            'text': noteList[idx].name,
                            'a_attr' : {
                                    'data-node-type': 'note',
                                    'data-node-id': noteList[idx]._id,
                                },
                            });         
                    }                       

                data.push({
                    'text': notebookList[idx].name,
                    'a_attr' : {
                            'data-node-type': 'notebook',
                            'data-node-id': notebookList[idx]._id,
                        },
                        'children': children
                    });
                });
            }


            res.json({ tree: data });
        });
    });
}

但它不起作用。

共有1个答案

梅修贤
2023-03-14
var async = require("async");

function getTree(req, res) {

    var data = [];

    User.findOne({_id: req.body.userId}, function(err, user) {

        NoteBook.find({creator: user._id}, function(err, notebookList) {

            async.forEach(notebookList, function(notebook, callback){


                Note.find({notebok: notebook._id}, function(err, noteList) {

                    var children = [];

                    for (var noteIdx in noteList) {

                        children.push({
                            'text': noteList[idx].name,
                            'a_attr' : {
                                'data-node-type': 'note',
                                'data-node-id': noteList[idx]._id,
                            },
                        });
                    }

                    data.push({
                        'text': notebookList[idx].name,
                        'a_attr' : {
                            'data-node-type': 'notebook',
                            'data-node-id': notebook._id,
                        },
                        'children': children
                    });
                });

            }, function(err){
                res.json({ tree: data });
            });



        });
    });
}
 类似资料:
  • 本文向大家介绍mongoose 安装,包括了mongoose 安装的使用技巧和注意事项,需要的朋友参考一下 示例 安装猫鼬就像运行npm命令一样简单 npm install mongoose --save 但是,请确保您也已MongoDB为您的操作系统安装或可以访问MongoDB数据库。 连接到MongoDB数据库: 1.将猫鼬导入应用程序: 2.指定一个Promise库: 3.连接到MongoD

  • Mongoose似乎不支持Mongo DBREF。显然,他们发布了“dbref”支持,但它实际上只是简单的引用(不具备引用不同集合中的文档的能力)。我终于创建了一个模式,允许我保存ObjectID引用的数组并填充它们,这对于我的模式的某些部分是很好的,但是如果我可以使用适当的DBREF创建一个数组,允许我引用来自多个集合的文档,那将是非常方便的。 幸运地(?)有一个模块可以在Mongoose中修补

  • 是否可以将C函数包装成“另一个”?(当然只有宏) 类似于: 那么,上述做法安全吗?

  • 问题内容: 我正在用Node.js和Mongoose准备数据库创建脚本。如何检查数据库是否已经存在,如果存在,请使用Mongoose删除(删除)该数据库? 我找不到一种将其与猫鼬放在一起的方法。 问题答案: 没有办法从猫鼬中删除一个集合,最好的办法是删除其中一个的内容: 但是有一种方法可以访问mongodb本机javascript驱动程序,该驱动程序可用于 警告 尝试备份之前进行备份,以防万一出问

  • 问题内容: 我有一个采用InputStream并从中读取数据的方法。我也想将此方法与ByteBuffer一起使用。有没有办法包装ByteBuffer以便可以将其作为流访问? 问题答案: JDK中什么都没有,但是有很多实现,谷歌提供ByteBufferInputStream。基本上,它们包装一个或多个ByteBuffer并跟踪其中的索引,该索引记录已读取的数量。事情是这样来涨了不少,但显然是越野车,

  • 问题内容: 尽管这里有一个相同的问题,但是我找不到我的问题的答案,所以这里是我的问题: 我正在使用mocha和chai测试我的node js应用程序。我正在用sinion封装功能。 当我尝试运行此测试时,它给了我错误 我也尝试过 在每个描述中,但仍然给我相同的错误。 问题答案: 您应该恢复in 功能,请按以下方法尝试。