如何通过节点js(mongoose)执行此mongodb查询 . 我有两个表格与下面的模式,我想从用户表中获取用户名和密码,并从信息表中获取全名 .
var infoSchema = mongoose.Schema({khatam_id:String,user_id:String,fullname:String,});
var usersSchema = mongoose.Schema({user_id:String,username:String,password:String,});
在你的机器上安装mongoose
npm install mongoose
import mongoose lib
const mongoose = require('mongoose'); const Schema = mongoose.Schema, ObjectId = Schema.ObjectId;
连接到mongodb并为您的表创建模式
mongoose.connect('mongodb://localhost/myappdatabase'); const usersSchema = new Schema({ _id: ObjectId, user_id: String, username: String, fullname: String }); const Users = mongoose.model('Users', usersSchema );
使用mongo查询从“用户”表中查找用户
Users.find({<here you can write your mongo query>}, function (err, docs) { // docs.forEach });
你必须使用聚合
db.users.aggregate([ { $lookup: { from: "info", localField: "user_id", foreignField: "_id", as: "userInfo" } }, { "$unwind": "$userInfo" }, ])
我不知道你是不是很热门,但如果你是你可以使用它 .
userSchema.virtual('infos', { ref: 'Info', localField: 'user_id', foreignField: 'user_id', })
假设您将infoSchema命名为Info模型,mongodb将其转换为infos,以防您不知道为什么虚拟字段将被称为infos ref . 显然,对Info模型的引用localField是引用userSchema唯一ID的字段, foreignField是你在infoSchema中引用的字段,它匹配你提到的localfield的唯一值 . 最后,与userSchema中的所有字段一起添加此项
{ toJSON: { virtuals: true }, toObject: { virtuals: true }, }
所以,当你查询用户给它一个镜头它真的派上用场 . 注意:它实际上并没有在数据库中创建一个字段(虚拟duh . )它只是填充你的响应对象以进行前端渲染,这实际上更好 .
连接到MongoDB:确保在程序执行之前运行MongoDB服务 .
var mongoose = require("mongoose"); mongoose.connect("mongodb://localhost:27017/your-database"); mongoose.Promise = global.Promise; var connection = mongoose.connection; connection.once('open', function() { console.log('connected to database); }); connection.on('error', function() { console.error('Mongoose connection error"); }); process.on('SIGINT', function() { mongoose.connection.close(function() { console.log('Mongoose connection disconnected due to app SIGINT.'); }); });
创建用户架构:
const Schema = mongoose.Schema; const usersSchema = new Schema({ user_id: String, username: String, fullname: String }); const Users = mongoose.model('Users', usersSchema );
像这样运行Query:
Users.findOne({query}) .then(function(user){ // do something }) .catch(function(err){ // handle error })
4 回答
在你的机器上安装mongoose
import mongoose lib
连接到mongodb并为您的表创建模式
使用mongo查询从“用户”表中查找用户
你必须使用聚合
我不知道你是不是很热门,但如果你是你可以使用它 .
假设您将infoSchema命名为Info模型,mongodb将其转换为infos,以防您不知道为什么虚拟字段将被称为infos ref . 显然,对Info模型的引用localField是引用userSchema唯一ID的字段, foreignField是你在infoSchema中引用的字段,它匹配你提到的localfield的唯一值 . 最后,与userSchema中的所有字段一起添加此项
所以,当你查询用户给它一个镜头它真的派上用场 . 注意:它实际上并没有在数据库中创建一个字段(虚拟duh . )它只是填充你的响应对象以进行前端渲染,这实际上更好 .
连接到MongoDB:确保在程序执行之前运行MongoDB服务 .
创建用户架构:
像这样运行Query: