【发布时间】:2022-01-03 05:22:52
【问题描述】:
假设我在电影数据库中有 3 个 MongDB 条目:
"books": [
{
"_id": "xxxxxx",
"title": "Fast Five",
"rating": 6
},
{
"_id": "yyyyyy",
"title": "Kill Bill",
"rating": 8
},
{
"_id": "zzzzzzzz",
"title": "Jumanji",
"rating": 5
}
]
如果标题和评分符合条件,我会使用 GraphQL 检索多部电影的 id:
query{
getMovies(itemFilterInput: {titles:["Fast Five", "Jumanji"], rating:6}){
_id
title
}
}
这应该返回快五。 我希望将其转换为这样的 mongoDB 查询:
{$and: [{rating:6}, {$or: [{title:"Fast Five", title:"Jumanji"}]}]}
在后端,我使用 NodeJS 和 Mongoose 来处理这个查询,我使用这样的东西:
getMovies: async args => {
try{
let d = args.itemFilterInput;
let filters = new Array();
const keys = Object.keys(d);
keys.forEach((key) => {
// The titles case
if(d[key] instanceof Array){
var sObj = {};
var sObjArray = [];
d[key].map(prop => {
sObj[key] = prop;
sObjArray.push(sObj);
});
filters.push({$or: sObjArray});
}else{
// The rating case
var obj = {};
obj[key] = d[key];
filters.push(obj);
}
});
const items = await Item.find({$and: filters});
return items.map(item => {
return item;
});
} catch (err) {
throw err;
}
}
很遗憾,这种方法行不通。 将 $or 参数嵌套在 $and params 中的正确方法是什么?
【问题讨论】:
-
this query 你在找什么?
-
成功了,谢谢!如果我只是将 $or 查询写出来,它也可以正常工作,但是我在创建对象的某个地方搞砸了。您的解决方案更加简洁明了。
标签: javascript node.js json mongodb mongoose