Node.js 仅返回1个find文档,但我请求3个ID来查找node/express

Node.js 仅返回1个find文档,但我请求3个ID来查找node/express,node.js,express,mongoose,postman,Node.js,Express,Mongoose,Postman,当我传递3个ID时,为什么以及如何仅保存find query中的文档 我想从这个循环中得到什么回报 router.post("/addBand", async (req, res) => { let singers = req.body.singer let singerArr = singers.split(', ') let singer for (let i = 0; i < singerArr.length; i++) { // solo = a

当我传递3个ID时,为什么以及如何仅保存find query中的文档

我想从这个循环中得到什么回报

router.post("/addBand", async (req, res) => {
  let singers = req.body.singer

  let singerArr = singers.split(', ')

  let singer
  for (let i = 0; i < singerArr.length; i++) {
    // solo = await GroupBand.findOne({ singer: ObjectId(singerArr[i]) }).populate('singer')
    singer = await Singer.find({ _id: ObjectId(singerArr[i]) })
    console.log(1, singer);
  }

  console.log(2, singer);

  const addedGroup = new GroupBand({
    bandName: req.body.bandName,
    singer: singer, // [...singer],
    debutDate: Date.parse(req.body.debutDate)
  })

  console.log(3, addedGroup);
  return


您应该使用&in操作符从数据库中检索多个文档

这里有一个使用示例

编辑

在不使用for循环的情况下尝试此操作:

singer = await Singer.find({ _id : $in: singerArr }})
这应该可以做到这一点,因为$in运算符将ID数组作为参数。

在我从split得到结果后,我循环他们传递Singer文档并找到他们的ID

  let singerArr = singers.split(', ')
  let singerArrayId=singerArr.map(ele=>ObjectId(ele)) or //  let singerArrayId=singerArr.map(ele=>mongoose.Types.ObjectId(ele))
  let data=await Singer.find({'_id': { $in:singerArrayId }});

尝试过了,但仍然是相同的,您可以发布Singerar的值,还可以使用$in运算符查找查询。您可以尝试像这样以原始JSON发送数据吗?我仍然在原始JSON中获得相同的值
  let singerArr = singers.split(', ')
  let singerArrayId=singerArr.map(ele=>ObjectId(ele)) or //  let singerArrayId=singerArr.map(ele=>mongoose.Types.ObjectId(ele))
  let data=await Singer.find({'_id': { $in:singerArrayId }});