ags*_*gsv 5 instantiation case-sensitive sails.js waterline sails-mongo
我在一个项目上使用SailsJS,我需要使用native()某些查询.我遇到的问题是我找不到从mongo集合find结果中实例化Waterline Model Object的正确方法.我一直在搜索有关此内容的信息,我发现的唯一内容如下:
var instance = new Model._model(mongo_result_item);
Run Code Online (Sandbox Code Playgroud)
这应该可以正常工作,但是当我这样做时instance.save(function(err, ins){});,由于"_id"字段,模型会抛出错误,应该是"id".
我已经看了sails-mongo代码,我发现对于"find"方法,他们这样做:
// 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));
});
Run Code Online (Sandbox Code Playgroud)
所以normalizeResults用"_id"属性和其他东西来做神奇的事.
我现在这样做的方式是要求sails-mongo 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]);
});
});
Run Code Online (Sandbox Code Playgroud)
有没有更好/正确的方法来实现这一目标?
我需要进行本机搜索,因为我发现使用字符串的Waterline find()方法存在问题,其中搜索应区分大小写.模型上的每个字符串字段都用作以下形式的正则表达式匹配:/ ^ {string} $/i
使用不区分大小写标记的正则表达式搜索会给我带来问题.另一方面,做{field:{$ regex:new RegExp('^'+ regexp_escaped_string +'$')}}是可能的,但我认为它的表现将比{field:value}差.
如果有人针对不区分大小写的问题找到了不同的解决方法,请指出正确的方向.
提前致谢.
$regex 可能会帮助您使用选项参数“i”来搜索不区分大小写的字符串,您也可以指定自定义正则表达式以获取更多信息,请参阅 $regex mongodb 文档。
/**
* PetController
*
* @description :: Server-side logic for managing pets
* @help :: See http://links.sailsjs.org/docs/controllers
*/
module.exports = {
searchByName: function (req,res) {
Pet
.native(function(err, collection) {
if (err) return res.serverError(err);
collection.find(
{
name: { $regex: /like-my-name/, $options: "i" } // here option "i" defines case insensitive
},
{
name: true
})
.toArray(function (err, results) {
if (err) return res.serverError(err);
return res.ok(results);
});
});
}
};
Run Code Online (Sandbox Code Playgroud)
有关本机 mongo 查询的更多信息,请参阅此处 - /sf/answers/3838153231/