Javascript 如何使用Mongoose重新格式化仅用于保存到MongoDB的数据,以避免;不是okForStorage;?

Javascript 如何使用Mongoose重新格式化仅用于保存到MongoDB的数据,以避免;不是okForStorage;?,javascript,mongodb,mongoose,Javascript,Mongodb,Mongoose,我在Mongoose中定义了模式,我刚刚意识到一个属性被保存为object(一种散列),但它的键中可能包含禁止使用的字符。所谓禁止,我指的是MongoDB不太喜欢的,导致存储错误的notokforstorage错误:点、美元符号等 由于我不想更改所有的应用程序,我想在模型上定义一些东西,在将对象传递给MongoDB之前将其重新格式化为数组,当然,我还需要一些东西在从MongoDB加载此类数据时将其重新格式化 我试着用接球手和二传手打了一段时间,但没能成功。在这方面有最佳实践吗?最好的方法是什么?

我在Mongoose中定义了模式,我刚刚意识到一个属性被保存为object(一种散列),但它的键中可能包含禁止使用的字符。所谓禁止,我指的是MongoDB不太喜欢的,导致存储错误的
notokforstorage
错误:点、美元符号等

由于我不想更改所有的应用程序,我想在模型上定义一些东西,在将对象传递给MongoDB之前将其重新格式化为数组,当然,我还需要一些东西在从MongoDB加载此类数据时将其重新格式化

我试着用接球手和二传手打了一段时间,但没能成功。在这方面有最佳实践吗?最好的方法是什么?我真的希望我能在模式的某个地方粘贴两个函数,而我的应用程序的其余部分将是纯黑盒

更新:我想要实现的目标(示例):

问题是:我应该把我的两个神奇函数
toMongo
fromMongo
挂在哪里,这样界面就可以像我在示例中所示的那样工作


(免责声明:提出此问题时,我是Mongoose&Node.js noob,因此即使是愚蠢的细节也可能对我有所帮助)

我想我自己找到了答案。可以通过以下方法解决此问题:

schema.post('init', function (doc) {
    doc.mapping = fromMongo(doc.mapping);
}

schema.pre('save', function (next) {
    this.mapping = toMongo(this.mapping);
    next();
}

这样,它与应用程序的其他部分非常隔离,到目前为止,我对这个解决方案没有任何问题。如果出现任何问题,我将尝试不断更新此答案。

在将值从模型传递到文档实例之前,您可能希望在此“预解析”这些值。对于其中的无效字符的种类,您可能会更具体一些。当然,
$
是正确的。但是你的问题会从你尝试做的事情中受益。我添加了一个例子,这样我的问题就更清楚了。
schema.post('init', function (doc) {
    doc.mapping = fromMongo(doc.mapping);
}

schema.pre('save', function (next) {
    this.mapping = toMongo(this.mapping);
    next();
}