Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Mongoose查询FindOne与数组_Javascript_Node.js_Mongodb_Mongoose - Fatal编程技术网

Javascript Mongoose查询FindOne与数组

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; }

所以我想验证一个值是否在集合中。我已经设法用.map做了。我的代码如下所示(字段是嵌套的):

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");
}