Node.js 仅返回1个find文档,但我请求3个ID来查找node/express
当我传递3个ID时,为什么以及如何仅保存find query中的文档 我想从这个循环中得到什么回报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
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 }});