我正在用猫屎在AND中梳理两个OR查询,但没有得到理想的结果
{
_id :"23432ferf",
"catId" : 21,
"attributes": [
{
"_id": "571237bfc02aad440c216f67",
"attributeValueM": "metal|Frame Material"
},
{
"_id": "571237bfc02aad440c216f66",
"attributeValueM": "green|color"
}
]
},
{
_id :"23432ferh",
"catId" : 21,
"attributes": [
{
"_id": "571237bfc02aad440c216f67",
"attributeValueM": "metal|Frame Material"
},
{
"_id": "571237bfc02aad440c216f66",
"attributeValueM": "blue|color"
}
]
}
现在通过mongoose查询
var condition = [
{ $or: [{ 'attributes.attributeValueM' : 'wood|Frame Material' }, { 'attributes.attributeValueM' : 'metal/Frame Material' }] },
{ $or: [{ 'attributes.attributeValueM' : 'blue|color' }, {'attributes.attributeValueM' : 'green|color'}] }
];
Test.find("catID":21).and(condition).exec(function (err, results) {
... // not getting any document
});
我如何将两个OR条件与AND condotion结合起来? 已经在attributes.attributeValueM上建立了索引,它正在使用下面给出的简单AND条件
[ { 'attributes.attributeValueM': 'green|color' },
{ 'attributes.attributeValueM': 'metal|Frame Material' } ]
请建议
答案 0 :(得分:1)
您可以使用
代替Test.find("catID":21).and(condition)
Test.find({
$and: [
{ catID:21 },
{ $or: [{ "attributes.attributeValueM" : 'wood|Frame Material' }, { "attributes.attributeValueM" : 'metal/Frame Material' }] },
{ $or: [{ "attributes.attributeValueM" : 'blue|color' }, {"attributes.attributeValueM" : 'green|color'}] }
]
}).exec(function (err, results) {
// rest of code
});
答案 1 :(得分:0)
我也对 AND 和 OR 操作的混合方式感到麻烦。这是我工作过的一个简单示例。此代码段没有给我期望的结果,换句话说, AND 和 OR 操作的正确组合。
public class CustomWebViewClient : WebViewClient
{
public override bool ShouldOverrideUrlLoading(Android.Webkit.WebView view, IWebResourceRequest request)
{
Intent intent = new Intent(Intent.ActionView, request.Url);
CrossCurrentActivity.Current.StartActivity(intent);
return true;
}
}
但是稍微的改变就给了我理想的结果:
awTextsDocuments = await AWTextModel
.find({
$and: [
{ name: { $regex: reqObj.q, $options: 'i' } },
{ $or: [ recordOwner: req.user._id, 'company-wide-visibility': { $in:
true } ] },
],
})
.skip(reqObj.offset)
.limit(reqObj.limit)
.sort([mongoSortQuery]);
请注意 recordOwner 和“全公司可见性” 之前和之后的括号。这有所作为,并给了我令人满意的结果。