1.aggregate
1.定义schema
model/order.js
var OrderSchema = mongoose.Schema({
order_id: String,
uid: Number,
trade_no: String,
all_price: Number,
all_num: Number
})
var OrderItemSchema = mongoose.Schema({
order_id: String,
title: String,
price: Number,
num: Number
})
2.定义model
model/order.js
var OrderModel = mongoose.model('Order', OrderSchema, 'order')
var OrderItemModel = mongoose.model('OrderItem ', OrderItemSchema, 'order_item')
3.聚合查询
order表关联order_itemapp.js
OrderModel.aggregate([
{
$lookup: {
from: "order_item",
localField: "order_id",
foreignField: "order_id",
as: "items"
}
}
], function(err, docs){
if(err){
console.log(err);
return;
}
console.log(docs);
})
order_item表关联order
OrderItemModel.aggregate([
{
$lookup: {
from: "order",
localField: "order_id",
foreignField: "order_id",
as: "order"
}
}
], function(err, docs){
if(err){
console.log(err);
return;
}
console.log(docs);
})
4.mongoose中获取id
$match: {_id: mongoose.Types.ObjectId("xxxxxxxxxxx")}
5.多表联查
OrderModel.aggregate([
{
$lookup: {
from: "order_item",
localField: "order_id",
foreignField: "order_id",
as: "items"
},
{
$lookup: {
from: "xxx",
localField: "order_id",
foreignField: "xxx_id",
as: "xxx"
}
}
], function(err, docs){
if(err){
console.log(err);
return;
}
console.log(docs);
})
2.populate
- 一种更强大的关联查询方法

1.定义Schema
var Schema = mongoose.Schema;
var ArticleSchema = new Schema({
title: {
type: String,
},
cid: {
type: Schema.Types.ObjectId,
ref: "ArticleCateModel" // articlecate表对应的模型名
},
author_id: {
type: Schema.Types.ObjectId,
ref: "UserModel" // articlecate表对应的模型名
},
author_name: {
type: String
},
description: String,
content: String
})
2.查询
- 通过
article,查询关联集合user和articlecate
// 文章表和分类表
ArticleModel.find({}).populate('cid').exec(function(err, docs){
console.log(docs);
})
// 文章表和分类表、用户表
ArticleModel.find({}).populate('cid').populate('author_id').exec(function(err, docs){
console.log(docs);
})
版权声明:本文为qq_42517220原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。