我正在尝试根据从 URL 发送的输入查询参数数组来查询 mongodb 集合中的文档。
示例数据库数据
[
{
"drawings": {
"circle": [],
"square": [
{
"id": "828",
"name": "square"
}
],
"cube": []
},
{
"drawings": {
"circle": [
{
"id": "827",
"name": "circle"
}
],
"square": [],
"cube": []
},
{
"drawings": {
"circle": [],
"square": [],
"cube": [
{
"id": "829",
"name": "cube"
}
]
}
]
输入查询参数:
query = ["square","cube"];
预期输出:
[
{
"drawings": {
"circle": [],
"square": [
{
"id": "828",
"name": "square"
}
],
"cube": []
},
{
"drawings": {
"circle": [],
"square": [],
"cube": [
{
"id": "829",
"name": "cube"
}
]
}
]
最适合 Mongoose 查询:
Schema.find({
$or:[
{'drawings.square':{$elemMatch:{ name:'square'}}},
{'drawings.cube':{$elemMatch:{ name:'cube'}}}
]
});
尝试了以下方法。但是,这是不正确的。
let draw = ["square","cube"];
let draw_query =[];
for (let a=0; a<draw.length;a++){
draw_query.push("{\"drawings."+ draw[a] +"\':{$elemMatch:{ name:\"" + draw[a] + "\"}}}");
}
它创建带有单引号字符串的数组。无法使用。
[ '{"drawings.square":{$elemMatch:{ name:"square"}}}',
'{"drawings.cube":{$elemMatch:{ name:"cube"}}}' ]
如何动态生成这个 Mongoose 查询?或者是否有更好的 Mongoose 查询来达到预期的结果。
最佳答案
您可以使用点表示法直接查询它,因此查询应如下所示:
db.collection.find({
$or: [
{
"drawings.square.name": "square"
},
{
"drawings.circle.name": "circle"
}
]
})
您可以使用 .map()
在 JS 中构建它,尝试:
var query = ["square","cube"];
var orQuery = { $or: query.map(x => ({ [x + ".name"]: x }) ) }
关于arrays - Mongoose中,基于数组查询字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54287723/