我在一个项目上使用SailsJS,我需要为某些查询使用native()
。我遇到的问题是,我无法从mongo集合find
的结果中找到正确的方式来实例化水线模型对象。我已经被搜索这方面的信息,我发现的唯一的事情是:如何从sails-mongo原生结果正确实例化Waterline模型对象?
var instance = new Model._model(mongo_result_item);
这应该正常工作,但是当我做instance.save(function(err, ins){});
模型抛出一个错误,因为“_id”字段,应是“id”。
我已经拍了一下成帆 - 蒙戈代码,我发现,对于“发现”的方法,他们这样做:
// Run Normal Query on collection
collection.find(where, query.select, queryOptions).toArray(function(err, docs) {
if(err) return cb(err);
cb(null, utils.normalizeResults(docs, self.schema));
});
所以normalizeResults确实神奇的“_id”属性,和其它东东。
我现在这样做的权利的方式是要求帆 - 蒙戈utils.js文件才能访问此方法。
全样本:
var mongoUtils = require('sails-mongo/lib/utils.js');
SampleModel.native(function(nativeErr, collection){
collection.find({ 'field' : value }).toArray(function(collectionErr, results){
if (!results || results.length == 0) return res.restfullInvalidFieldValue({ msg : 'INVALID_VALUE' });
var norm_results = mongoUtils.normalizeResults(results);
var instance = new SampleModel._model(norm_results[0]);
});
});
是否有实现这一美好/有道?
我需要进行本机搜索,因为我发现使用字符串的Waterline find()方法存在问题,其中搜索应区分大小写。在模型中的每个字符串字段被用来作为形式的正则表达式匹配:/^{串} $ /我
用不区分大小写的标志会给我的问题正则表达式搜索。另一方面,{field:{$ regex:new RegExp('^'+ regexp_escaped_string +'$')}}可能是可能的,但我认为它会比{field:value}更差。
如果有人已经找到了不区分大小写的问题,不同的解决方法,请点我在正确的方向。
在此先感谢。
我是Sails的新手,但在Sails.js的Gitter页面上我有一些帮助。你可能想尝试那里。 [Gitter Page](https://gitter.im/balderdashy/sails) –