mongoose 的使用【05】:mongoose 中使用 aggregate 聚合管道【01、order查询】
./model/db.js
// 引入mongoose const mongoose = require("mongoose"); //解决index索引引起的弃用提醒:(node:13616) DeprecationWarning: collection.ensureIndex is deprecated. Use createIndexes instead. mongoose.set("useCreateIndex", true); // 连接数据库 mongoose.connect("mongodb://127.0.0.1:27017/jtdb", { useNewUrlParser: true, useUnifiedTopology: true }, function (err, connection) { if (err) { console.log(err); return; } console.log("连接数据库成功"); }); module.exports = mongoose;
./model/order.js
const mongoose = require("./db.js"); var OrderSchema = mongoose.Schema({ order_id: String, title: String, price: Number, num: Number, }); module.exports = mongoose.model("Order", OrderSchema, "order");
order.js
// order表关联order_item,只需要引入order表 var OrderModel = require("./model/order.js"); // 查询order表的数据 // OrderModel.find({}, function (err, data) { // console.log(data); // }); // order表关联order_item,mongoose 的语法和mongo的语法基本相似 // 利用聚合管道查询出总价小于等于200的订单 OrderModel.aggregate( [ { $lookup: { from: "order_item", localField: "order_id", foreignField: "order_id", as: "items", }, }, { $match: { all_price: { $lte: 500 }, }, }, ], function (err, data) { if (err) return console.error(err); console.log(JSON.stringify(data)); } );
执行 node ./order.js
输出:
[ { "_id":"60053a31e811c2445c3e43e2", "order_id":"2", "uid":"7", "trade_no":"222", "all_price":140, "all_num":4, "items":[ { "_id":"60053a31e811c2445c3e43e9", "order_id":"2", "title":"养乐多", "price":20, "num":2 }, { "_id":"60053a31e811c2445c3e43ea", "order_id":"2", "title":"金典牛奶", "price":10, "num":4 }, { "_id":"60053a31e811c2445c3e43eb", "order_id":"2", "title":"优乐美", "price":5, "num":6 }, { "_id":"60053a31e811c2445c3e43ec", "order_id":"2", "title":"伊利牛奶", "price":15, "num":2 } ] } ]