BorrowBookSchema
const borrowBookSchema = new mongoose.Schema({
member_id : {
type : String,
required: true,
},
member_name : {
type : String,
required : true
},
bookdetails : [{
bookid : String,
bookname : String,
todaydate : String,
returndate : String,
status : Boolean
}]
})
只返回status : false
,但它也返回status : true
。如何解决?
const returnBorrowBook = (req,res) => {
const {memberid} = req.body
let response = await BorrowBook.findOne({$and : [{member_id : memberid} ,{"bookdetails.status" : false}]})
console.log(response)
其结果如下:
bookdetails: [
{
bookid: '63f5d00a0effd7323ac20bea',
bookname: 'Atomic Habits',
todaydate: '03/03/2023',
returndate: '03/03/2023',
status: true,
_id: new ObjectId("64016a278023cdb8a881a35a")
},
{
bookid: '63f5d00a0effd7323ac20bea',
bookname: 'Atomic Habits',
todaydate: '01/03/2023',
returndate: null,
status: false,
_id: new ObjectId("64016b365203f7c11528392e")
}
]
1条答案
按热度按时间wi3ka0sx1#
您正在通过子文档字段的值(
status
)过滤bookdetails
子文档,而不是过滤borrow_book
文档。在borrow_book
集合上使用运算符($and
)只会影响其查询结果,而不会影响子文档。查询选择
borrow_book
集合中的所有文档,其中:member_id
字段值等于books[0].member_id
bookdetails
数组至少有一个嵌入文档,其中包含值为false
的字段status
。聚合管道可以做到这一点。
例如(“mongoose”:“^7.1.1”)
选项二。
输出: