Javascript 完全虚拟的Mongoose模式,保存在内存中,不持久

Javascript 完全虚拟的Mongoose模式,保存在内存中,不持久,javascript,node.js,mongoose,Javascript,Node.js,Mongoose,找不到任何关于此的文档或帖子,这可能表明我试图做一些不正确的事情 是否可以使用完全虚拟的Mongoose模式,即不持久化到db 我有很多模型,其中大部分都是持久化到db的,但我希望一致地包括只保留在内存中而不是持久化的模型 我能想到的最接近的方法是沿着这些线,但它仍然会在数据库中保留只有id属性的对象。简化如下: // access_token.js var schema = mongoose.Schema({}); schema.virtual('token').get(function()

找不到任何关于此的文档或帖子,这可能表明我试图做一些不正确的事情

是否可以使用完全虚拟的Mongoose模式,即不持久化到db

我有很多模型,其中大部分都是持久化到db的,但我希望一致地包括只保留在内存中而不是持久化的模型

我能想到的最接近的方法是沿着这些线,但它仍然会在数据库中保留只有id属性的对象。简化如下:

// access_token.js
var schema = mongoose.Schema({});
schema.virtual('token').get(function() {
    return 'abcde12345';
});
module.exports = mongoose.model('AccessToken', schema);
这样做的想法是抽象模型,这样应用程序的消费部分就不需要知道模型是持久化到数据库还是只保存在内存中。当然,这可以通过创建与普通对象相同的对象和方法来实现,但这种方法很快就会变得重复。

您可以覆盖(monkey patch)保存数据的Mongoose方法(例如,
.save
),但我怀疑您试图做的是困难的/不可能的

您可以看看sift.js,它是一个用于内存查询的查询库

您可以为这个总是失败的型号设置一个

schema.pre('save', function (next) {
    next(new Error('This can't be saved!');
});

这样,您就可以知道自己什么时候做错了。

有一个想法,就是覆盖模式用于持久化数据库实例的方法,并进行挖掘以查看什么是可访问的。您可以返回一个具有默认Mongoose调用别名的对象吗?就MongoDB的工作方式而言,我认为不可能不将记录持久化到磁盘。我可能错了,但我很确定这意味着如果您更改它,这些更改将保留到基本模型。(从代码上看,似乎至少是这样。)这似乎是一个不错的选择,类似于“saveLocal”而不是“save”。看来你是对的,这会影响到其他车型。