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

MongoDB动态条件查询API开发:基于用户输入的书籍查询实现

实现POST接口/getParticularBooks查询MongoDB书籍集合

核心逻辑

直接将请求体中的参数作为MongoDB的查询条件传入find()方法即可,MongoDB原生支持多条件的AND查询,刚好匹配传入多个参数的场景。

具体实现示例(以Express框架为例)

以下分别给出原生MongoDB驱动和Mongoose两种常用方案的代码:

1. 原生MongoDB驱动实现

const { MongoClient } = require('mongodb');
const express = require('express');
const app = express();

// 解析JSON格式的请求体
app.use(express.json());

// MongoDB连接配置
const uri = 'mongodb://localhost:27017';
const client = new MongoClient(uri);
let booksCollection;

// 初始化数据库连接
async function initDB() {
  await client.connect();
  const db = client.db('your-db-name'); // 替换为你的数据库名称
  booksCollection = db.collection('books'); // 替换为你的书籍集合名称
  console.log('MongoDB连接成功');
}
initDB();

// 实现查询接口
app.post('/getParticularBooks', async (req, res) => {
  try {
    // 直接把请求体作为查询条件
    const queryConditions = req.body;
    // 查询符合条件的书籍并转为数组
    const matchedBooks = await booksCollection.find(queryConditions).toArray();
    
    res.status(200).json({
      success: true,
      data: matchedBooks
    });
  } catch (err) {
    res.status(500).json({
      success: false,
      message: '查询失败',
      error: err.message
    });
  }
});

// 启动服务
app.listen(3000, () => {
  console.log('服务运行在 http://localhost:3000');
});

2. Mongoose实现

如果用Mongoose,代码会更简洁:

const express = require('express');
const mongoose = require('mongoose');
const app = express();

app.use(express.json());

// 连接MongoDB
mongoose.connect('mongodb://localhost:27017/your-db-name')
  .then(() => console.log('MongoDB连接成功'))
  .catch(err => console.error('数据库连接失败', err));

// 定义书籍Schema与Model
const bookSchema = new mongoose.Schema({
  name: String,
  year: Number,
  author: String,
  // 按需添加其他字段
});
const Book = mongoose.model('Book', bookSchema);

// 实现查询接口
app.post('/getParticularBooks', async (req, res) => {
  try {
    const matchedBooks = await Book.find(req.body);
    res.status(200).json({
      success: true,
      data: matchedBooks
    });
  } catch (err) {
    res.status(500).json({
      success: false,
      message: '查询失败',
      error: err.message
    });
  }
});

app.listen(3000, () => {
  console.log('服务运行在 http://localhost:3000');
});

关键说明

  • 多条件自动适配:当传入{name: "hi", year: 2020}这类多参数时,MongoDB会自动按AND逻辑筛选同时满足所有条件的书籍,无需额外处理。
  • 请求体解析:必须通过express.json()中间件解析JSON请求体,否则req.body会是undefined。
  • 扩展模糊查询:如果需要模糊匹配(比如书名包含关键词),可以将请求体参数转为正则表达式,例如{name: {$regex: req.body.name, $options: "i"}},严格匹配则直接用原参数即可。

内容的提问来源于stack exchange,提问作者Fear Reaper

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 17:54:25