MongoDB文档字段访问:两类书籍查询需求及代码问题排查
问题1:查询2022年出版书籍的ISBN与书名
原代码错误点:
$unwind展开subject.book后,该字段已变为单个对象而非数组,无需使用$elemMatch- 匹配年份的字段路径错误,应为
subject.book.yearPub而非subject.yearPub
修正后的聚合代码:
db.Subject.aggregate([ // 展开书籍数组 {"$unwind": "$subject.book"}, // 匹配2022年出版的书籍 {"$match": {"subject.book.yearPub": 2022}}, // 投影需要的字段 {"$project": { "_id": 0, "ISBN": "$subject.book.ISBN", "书名": "$subject.book.bookTitle" }} ])
问题2:查询作者数在2到3位之间的书籍的ISBN、书名及出版社
原代码错误点:
- 字段路径错误,应为
subject.book.author而非book.author - 通过下标
exists判断作者数逻辑错误:数组下标从0开始,3位作者的数组最大下标是2而非3;且该方式无法准确匹配长度范围 - 未展开
subject.book数组,直接匹配会返回整个文档,而非符合条件的单个书籍项
修正后的聚合代码:
db.Subject.aggregate([ // 展开书籍数组 {"$unwind": "$subject.book"}, // 匹配作者数在2-3之间的书籍 {"$match": { "$expr": { "$and": [ {"$gte": [{"$size": "$subject.book.author"}, 2]}, {"$lte": [{"$size": "$subject.book.author"}, 3]} ] } }}, // 投影需要的字段 {"$project": { "_id": 0, "ISBN": "$subject.book.ISBN", "书名": "$subject.book.bookTitle", "出版社": "$subject.book.publisher" }} ])
内容的提问来源于stack exchange,提问作者steadysteady123
相关产品推荐
相关产品推荐

