从javascript对象构造水线模型对象

时间:2015-08-24 10:09:23

标签: sails.js waterline sails-mongo

为了减轻MongoDB服务器的负载,我想从Redis中的Waterline缓存一些对象。为此,我必须将对象序列化为JSON。

我的问题是,如何将我的JSON构建回Waterline模型的实例,使用数据类型处理,成员函数等,使这对消费代码透明?

每当我运行本机MongoDB查询时,我也想要这个,给我带有本地ObjectID的对象,不匹配的日期类型等。

User.findOne(id, function (err, user) {
   // to string and back again, could be stored in cache in the meantime
   var object = JSON.parse(JSON.stringify(user));

   var user = new User(object); //doesn't work
   var user = User.toObject(object); // doesn't work
}

2 个答案:

答案 0 :(得分:5)

根据this issue,此应该工作

var user = new User._model(object);

注意您插入的值。新对象应该非常符合字符串化之前的内容。

答案 1 :(得分:1)

您想要接近什么样的cache

var object = JSON.parse(JSON.stringify(user));不会存储所有信息。 JSON与JavaScript对象不同。其中user是JavaScript对象,由Sails的Waterline引擎创建。它有像save这样的方法,但当你把它变成JSON时,方法就会消失。

var user = new User(object);var user = User.toObject(object);无法正常工作,因为User不是构造函数,只是sails.models.user的简写,代表User /api/models/User.js处的模型。

如果您想快速查询,则必须将data存储在Redis中,然后再从中检索。

通过这种方式,您应该将user从主数据库保存到redis,方法是将其手动插入redis,然后再检索。但是,除了将主数据库模型(在本例中为User)复制到redis User模型(或任何您命名的模型)之外,您的所有主数据库模型特征都将消失。