Waterline/Sails.js/Mongo如何使用和查询一个字段的条件?
我的问题和你的一样。有一个答案,但对我来说不起作用(对提问者也不起作用) 据我所知,waterline的查询语言中没有关键字“and”。 如果我要查询多个条件,我可以简单地使用:Waterline/Sails.js/Mongo如何使用和查询一个字段的条件?,sails.js,waterline,Sails.js,Waterline,我的问题和你的一样。有一个答案,但对我来说不起作用(对提问者也不起作用) 据我所知,waterline的查询语言中没有关键字“and”。 如果我要查询多个条件,我可以简单地使用: MyModel.find({fieldA:valueA, filedB:valueB}); 但我的问题是如何做到: MyModel.find({fieldA:{ contains:keyword1, contains:keyword2 }}); 因为我无法在Object/JSON中设置两个同名键,所以
MyModel.find({fieldA:valueA, filedB:valueB});
但我的问题是如何做到:
MyModel.find({fieldA:{
contains:keyword1,
contains:keyword2
}});
因为我无法在Object/JSON中设置两个同名键,所以我尝试:
MyModel.find({fieldA:
[
{contains:keyword1},
{contains:keyword2}
]
});
及
及
但它们都没有像预期的那样工作:第一个和第二个返回空集,第三个只包含关键字2。
似乎当您试图使用链接的“where”方法将两个“contains”条件添加到同一个字段(fieldA)时,第二个条件将覆盖第一个条件
我正在使用本地mongoDB的方法来解决这个问题,有人知道如何用waterline的方法来解决这个问题吗?或者这是一个应该在github上报告的问题
PS:对不起,我的英语很差:p要回答你的问题,不支持多个
包含。无论是遗漏还是功能请求都有争议。至少对于SQL来说,能够支持以下内容是一个愚蠢的简单修复(尽管我花了一个多小时才找到它):
orm.collections.user.find({
and: [
{ name: { contains: 'neil' } },
{ name: { contains: 'armstrong' } }
]
});
它只需要在以下文件中添加一个case'和':
,即可工作:
我怀疑Mongo的情况也会类似。我找到了Mongo数据库应该采用的方法
您应该能够使用$和
键在同一字段上组合多个标准:
orm.collections.user.find({
$and: [
{ name: { contains: 'neil' } },
{ name: { contains: 'armstrong' } }
]
});
Sails mongo源代码显示了以下内容:
/**
* Parse Clause
*
* <clause> ::= { <clause-pair>, ... }
*
* <clause-pair> ::= <field> : <expression>
* | or|$or: [<clause>, ...]
* | $or : [<clause>, ...]
* | $and : [<clause>, ...]
* | $nor : [<clause>, ...]
* | like : { <field>: <expression>, ... }
*
* @api private
*
* @param original
* @returns {*}
*/
/**
*解析子句
*
* ::= { , ... }
*
* ::= :
*|或|$或:[,…]
*|$or:[,…]
*|$和:[,…]
*|$nor:[,…]
*|像:{:,…}
*
*@api private
*
*@param-original
*@returns{*}
*/
感谢您的回复和宝贵时间!:)所以我应该在github上报告这是一个bug(或者发送一个功能请求)?可以在mongo上工作吗。。。想知道我是否做错了什么,或者水线是否真的远远落后,它确实有效!看看我的答案!使用$而不是mongoDid,有人在github上为此提出了一个问题?
orm.collections.user.find({
$and: [
{ name: { contains: 'neil' } },
{ name: { contains: 'armstrong' } }
]
});
/**
* Parse Clause
*
* <clause> ::= { <clause-pair>, ... }
*
* <clause-pair> ::= <field> : <expression>
* | or|$or: [<clause>, ...]
* | $or : [<clause>, ...]
* | $and : [<clause>, ...]
* | $nor : [<clause>, ...]
* | like : { <field>: <expression>, ... }
*
* @api private
*
* @param original
* @returns {*}
*/