Author 模型
const mongoose = require('mongoose') const moment = require('moment') const Schema = mongoose.Schema const AuthorSchema = new Schema( { first_name: { type: String, required: true, max: 100 }, family_name: { type: String, required: true, max: 100 }, date_of_birth: { type: Date }, date_of_death: { type: Date } }, { toJSON: { virtuals: true } } ) module.exports = mongoose.model('Author', AuthorSchema)
数据集
{ "RECORDS": [ { "_id": "5deb0af03e15fb05116733f9", "first_name": "Isaac", "family_name": "Asimov" }, { "_id": "5deb0af03e15fb05116733f7", "first_name": "迅", "family_name": "鲁" }, { "_id": "5deb0af03e15fb05116733f8", "first_name": "言", "family_name": "莫" }, { "_id": "5deb0af03e15fb05116733f6", "first_name": "笑笑生", "family_name": "兰陵" }, { "_id": "5deb0af03e15fb05116733f5", "first_name": "迁", "family_name": "司马" }, { "_id": "5df25414c9d219055b41f833", "first_name": "金", "family_name": "巴" }, { "_id": "5df25439c9d219055b41f834", "first_name": "立波", "family_name": "周" }, { "_id": "5df25449c9d219055b41f835", "first_name": "蒙", "family_name": "王" }, { "_id": "5df2544fc9d219055b41f836", "first_name": "朔", "family_name": "王" }, { "_id": "5df2546ac9d219055b41f837", "first_name": "土", "family_name": "王" } ] }
需求
根据作者姓名进行查询,即 family_name+first_name
mongodb 聚合查询命令
db.authors.aggregate([ { $project: { name: { $concat: ['$family_name', '$first_name'] } } }, { $match: { $or: [{ name: { $regex: new RegExp('王', 'i') } }] } }, { $skip: 0 }, { $limit: 10 } ])
输出
[ { "_id": ObjectId("5df25449c9d219055b41f835"), "name": "王蒙" }, { "_id": ObjectId("5df2544fc9d219055b41f836"), "name": "王朔" }, { "_id": ObjectId("5df2546ac9d219055b41f837"), "name": "王土" } ]
mongoose 查询方式
// query = { name: '王' } exports.listName = query => { return new Promise((resolve, reject) => { let { name, page, limit } = query console.log(query) page = page ? page : 1 limit = limit ? limit : 100 let match = {} let like = [] if (name) { like.push({ name: { $regex: new RegExp(name, 'i') } }) match.$or = like } Author.aggregate([ { $project: { name: { $concat: ['$family_name', '$first_name'] } } }, { $match: match }, { $skip: +(page - 1) * limit }, { $limit: +limit } ]).exec((err, result) => { if (err) { return reject(err) } resolve({ items: result }) }) }) }
输出
{ items: [ { _id: 5df25449c9d219055b41f835, name: '王蒙' }, { _id: 5df2544fc9d219055b41f836, name: '王朔' }, { _id: 5df2546ac9d219055b41f837, name: '王土' } ] }
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于