MongoDB私人领域

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

var GameSchema = new Schema({ likes: { type: [{ type: Schema.ObjectId, ref: 'User' }] }, likes_count: { type: Number } }); 

我不需要Db中的likes_count字段,但控制器只返回模型有的字段,所以我添加了likes_count字段到db模型

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

有没有办法添加额外的数据到数据库模型时发送请求没有他们在数据库?

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

对于那些仍然感兴趣的人, mongo_db 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 } }); 

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

从驾驶员的angular度来看你也许可以做到这一点 ,我会把这些留给那些了解这种事情的人。 看看下面的post使用MongoDB C#映射私人支持字段 。

我可以从MongoDB引擎和服务器stream程方面回答。 如果您正在寻找一种方法来标记JSON文档中的字段,以便在发送到MongoDB引擎接收的实际CRUD请求时将其设为私有,则不会。

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