You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 09:55:23