我有两个表有下面的模式,我想从用户表中获取用户名和密码,从信息表中获取全名。
var infoSchema=mongoose.Schema({khatam_id:String,user_id:String,fullname:String,});
var usersSchema=mongoose.Schema({user\u id:String,username:String,password:String,});
假设您知道如何设置设置mongoose并连接数据库,并且只需要正确的查询,让我与您提供的模型分享我注意到的一些东西。我认为不需要两个集合,因为您可以在一个集合下存储相同的内容,因为这样可以节省从info模式查找用户数据的时间。因此,用户模式可以是
var usersSchema = mongoose.Schema({
user_id: String,
username: String,
password: String,
khatam_id: String,
fullname: String
});
使用以下查询,您可以获得用户详细信息
Users.findOne({})
.then(function(user){
// do something
})
.catch(function(err){
// handle error
})
与使用聚合查询或mongoose填充函数相比,这更高效、更快。
如果上述方法不适合您,您可以尝试mongoose填充函数。
UserSchema = new mongoose.Schema({
user_id: String,
password: String,
},
// schema options: Don't forget this option
// if you declare foreign keys for this schema afterwards.
{
toObject: {virtuals:true},
// use if your results might be retrieved as JSON
// see http://stackoverflow.com/q/13133911/488666
//toJSON: {virtuals:true}
});
UserInfoSchema = new mongoose.Schema({
user_id: String,
khatam_id: String,
username: String,
fullname: String,
});
// Foreign keys definitions
UserSchema.virtual('userDetails', {
ref: 'UserInfoSchema',
localField: 'user_id',
foreignField: 'user_id',
justOne: true // for many-to-1 relationships
});
// Models creation
var UserSchema = mongoose.model('UserSchema', UserSchema);
var UserInfoSchema = mongoose.model('UserInfoSchema', UserInfoSchema);
// Querying
UserSchema.find({...})
// if you use select() be sure to include the foreign key field !
.select({.... user_id ....})
// use the 'virtual population' name
.populate('userDetails')
.exec(function(err, books) {...})
连接到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 );
按如下方式运行查询:
Users.findOne({query})
.then(function(user){
// do something
})
.catch(function(err){
// handle error
})
我不知道你是否是个热门人物,但如果你是,你可以用这个。
userSchema.virtual('infos',
{
ref: 'Info',
localField: 'user_id',
foreignField: 'user_id',
})
假设你的名字是信息模式作为信息模型,mongodb将它转换为信息,以防你不知道这就是为什么虚拟字段将被称为信息参考显然是对信息模型本地字段的引用是引用用户模式唯一id的字段在infoSchema中引用与localfield u提到的唯一值相匹配的值。最后,在您的用户模式中的所有字段中添加以下内容
{
toJSON: { virtuals: true },
toObject: { virtuals: true },
}
所以当你查询用户给它一次机会时,它真的会派上用场。注意:它实际上并没有在数据库中创建一个字段(虚拟废话)。)它只是填充前端渲染的响应对象,这实际上更好。
问题内容: 以下代码使我在节点js中出现异常:“需要删除或更新” 由于我指定了更新操作,因此无法解决问题。 问题答案: 节点驱动程序中的语法与外壳程序中的语法不同,这是您使用的语法。 有一个单独的功能
当我用我的节点运行MongoDB连接时。js应用程序哪个游戏平台我在这里面临着越来越多的MongoDB连接的问题[不使用任何查询,但它不断增加],达到819,我的MongoDB复制服务器停止响应,间接应用程序停止工作。但是我想保持至少20个关于如何解决这些问题的联系,请帮助我。 ** Mongodb连接:const connectionString=mongodb://AAAA:PASSWORD@
我已经开始在一个简单的node.js应用程序中使用Q Promise包。所以我对如何在所有Promise序列完成后关闭数据库连接感兴趣。 例子: 我想在显示集合名称后关闭连接,但此匿名函数中没有db上下文。 有没有办法用promise模式处理此类案件?
问题内容: 我目前与我加入的公司的设置是IIS被用作我们的主要Web服务器,并使用CA签名证书。我可以访问certificate.pdx以及私钥。 我已经设置了一个https节点API服务器来处理一些实时信息/充当简单的附加中间层,但是我的网站是通过IIS服务的。应用程序的流程是这样的。 1)访问IIS将在其上提供服务的网页 2)单击一个按钮,然后向我的节点服务器发出GET请求 目前,我只是在开发
我试图使用node.js与mongoDB和以下教程在http://howtonode.org/express-mongodb 打开连接的代码是 但是我看不到任何连接被关闭。但当我看到mongo控制台上的日志时,我可以看到一些连接在一段时间后打开和关闭。 连接会自动关闭吗?当大量客户端尝试访问服务器时会有问题吗?应该在哪里关闭连接? 谢谢 图措
我对这两个节点都不熟悉。js和MongoDB,但我已经设法将SO和mongo的文档中的一些部分整合在一起。 Mongo documentetion给出了一个例子: 如果我只需要在一个地方的一个函数中使用数据库,这看起来很好。在SO上搜索和阅读表明,我不应该每次都打开一个新连接,而是使用一个池并重用我第一次得到的数据库对象。这个答案在SO上很丰富,但我不确定如何首先获取DB对象,然后如何重用它。 假