Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js MongoDB专用字段_Node.js_Mongodb_Express_Mongoose - Fatal编程技术网

Node.js MongoDB专用字段

Node.js MongoDB专用字段,node.js,mongodb,express,mongoose,Node.js,Mongodb,Express,Mongoose,我有一个产品模型,它有很多领域。其中一些专用于前端应用程序,例如: var GameSchema = new Schema({ likes: { type: [{ type: Schema.ObjectId, ref: 'User' }] }, likes_count: { type: Number } }); 我不需要数据库中的likes\u count字段,但控制器

我有一个产品模型,它有很多领域。其中一些专用于前端应用程序,例如:

var GameSchema = new Schema({
    likes: {
        type: [{
            type: Schema.ObjectId,
            ref: 'User'
        }]
    },
    likes_count: {
       type: Number
    }
});
我不需要数据库中的
likes\u count
字段,但控制器只返回模型具有的字段,所以我将
likes\u count
字段添加到数据库模型中

exports.some_method = function(req, res){
    var game = req.game;
    game.likes_count = game.likes.length
    res.json(game);
}

在发送请求时,有没有一种方法可以向数据库模型添加额外的数据,而不在数据库中

请注意,问题不在
likes\u count
字段本身,我有不同的模型,但重点是在db模型上有额外的数据。

在发送请求时,有没有一种方法可以在db模型中添加额外的数据而不在db中

从司机的角度来看,你也许可以做到这一点,我将把这留给那些知道这些事情的人。查看下面的帖子

我可以从MongoDB引擎和服务器进程方面进行回答;如果您正在寻找一种方法来标记JSON文档中的一个字段,使其在发送到MongoDB引擎收到的实际CRUD请求时成为私有字段,那么不会


但是,您可以在实际CRUD请求之前拦截JSON并对其进行转换。在执行INSERT、Modify或Update语句之一之前,不会插入正在生成的JSON。伪步骤是生成一个JSON文档,将其发送到MongoDB前面的broker\wrapper等,然后通过删除相关字段对其进行转换,然后将新对象作为CRUD请求发送到MongoDB引擎。

对于仍然感兴趣的人,MongoDB mongoose(@robertklep)有字段,可以用作临时数据字段,但在数据库中不存在

GameSchema.virtual('likes_count').get(function () {
  return this.likes.length;
});
请注意,您的模型必须对这样的虚拟对象具有权限,以便您可以在控制器中使用它

var UserSchema = new Schema({
    username: {
        type: String
    }
}, {
    toObject: { virtuals: true },
    toJSON: { virtuals: true }
});

你的意思是我必须在每次CRUD操作时将
苹果
转换为
菠萝
,并在前端的每个请求时转换回来?你总结了。这是一种(单一的)方法,在这方面不是一种非常有效的方法!我根本不和司机一起工作;但这可能是一个更好的领域去挖掘,通过对s.O和谷歌关于这个话题的简短访问。我认为我描述的方式是低效的。这是一个好问题;因此+1。这确实是猫鼬的一个特性,而不是猫鼬本身。对我来说,对于这样一个琐碎的东西来说,这似乎是一种过度的杀伤力operation@robertklep是的,只是打字错误