在Mongoosestring键中存储Json对象

在我的Mongoose模式中,我有一个string是一个string,我想能够在其中存储一个JSON对象。 可能吗? 在Postgres中,可以将字典存储在string列中。

我想这样做是因为字典(实际上是JS中的一个JSON对象)只是一个简单的读写值,不需要查询,而且因为它只是一个值而不是一个值的数组。

是的,你可以只存储{myJsonProperty: JSON.stringify(myObject)} 。 希望你知道你也可以在你的{myJsonProperty: Object}模式中设置{myJsonProperty: Object}并存储整个对象,而不{myJsonProperty: Object}其转换为string。 它不一定是一个模式的嵌套文档,它可以只是一个普通的JavaScript对象。

如果你可以改变你的字段forms“string”的types为“对象”,你可以保存JSON。

 var schema_obj = new Schema({ field1: Object, .. }); 

被接受的答案对于大多数情况是有利的。

但是,如果你有一个你想要存储的对象,并且你不能控制对象键(例如它们可能是用户提交的),你可能要考虑把它们存储为JSON。 这使您可以克服MongoDB施加的限制,即密钥不能包含保留字符 $.

您可以使用Mongoose getter和setter来实现这个function,例如:

 data: { type: String, get: function(data) { try { return JSON.parse(data); } catch() { return data; } }, set: function(data) { return JSON.stringify(data); } }