Javascript Mongoose查询FindOne与数组
所以我想验证一个值是否在集合中。我已经设法用.map做了。我的代码如下所示(字段是嵌套的):Javascript Mongoose查询FindOne与数组,javascript,node.js,mongodb,mongoose,Javascript,Node.js,Mongodb,Mongoose,所以我想验证一个值是否在集合中。我已经设法用.map做了。我的代码如下所示(字段是嵌套的): const loopFields=[ “嵌套的.field1”, “嵌套的.field2”, “嵌套的.field3”, “嵌套的.field4” ]; 异步函数getField(){ 常量字段=loopFields.map(异步(fld,idx)=>{ const result=await Field.findOne({[fld]:req.body.Field}); 如果(结果){ 返回fld; }
const loopFields=[
“嵌套的.field1”,
“嵌套的.field2”,
“嵌套的.field3”,
“嵌套的.field4”
];
异步函数getField(){
常量字段=loopFields.map(异步(fld,idx)=>{
const result=await Field.findOne({[fld]:req.body.Field});
如果(结果){
返回fld;
}
});
const isFound=等待承诺。全部(字段);
对于(i=0;i
代码确实有效,但我正在寻找一种方法来重新分解它 动态构建一个
$或子句,并将其传递给find方法,如下所示:
var loopFields=[
“嵌套的.field1”,
“嵌套的.field2”,
“嵌套的.field3”,
“嵌套的.field4”
];
变量字段=loopFields.map(字段=>{
var x={};
x[字段]=请求主体字段;
返回x;
})
find({$or:fields});
动态构建一个$or
子句,并将其传递给find方法,如下所示:
var loopFields=[
“嵌套的.field1”,
“嵌套的.field2”,
“嵌套的.field3”,
“嵌套的.field4”
];
变量字段=loopFields.map(字段=>{
var x={};
x[字段]=请求主体字段;
返回x;
})
find({$or:fields});
Good question for Good question for Worked fine。我在db.collection.find中添加了一个wait,以便使用返回的值。谢谢你的帮助,很好。我在db.collection.find中添加了一个wait,以便使用返回的值。谢谢你的帮助。
const loopFields = [
"nested.field1",
"nested.field2",
"nested.field3",
"nested.field4"
];
async function getField() {
const field = loopFields.map(async (fld, idx) => {
const result = await Field.findOne({ [fld]: req.body.field });
if (result) {
return fld;
}
});
const isFound = await Promise.all(field);
for (i = 0; i < loopFields.length; i++) {
if (isFound[i] !== undefined) {
return true;
}
}
}
const isValid = await getField();
if (!isValid) {
return res.status(400).send("Field not found");
}