Node.js 如何在mongoose中实现mysql的左连接等功能
我将在mongoose中实现类似mysql左连接的功能。 日期是Node.js 如何在mongoose中实现mysql的左连接等功能,node.js,mongodb,mongoose,Node.js,Mongodb,Mongoose,我将在mongoose中实现类似mysql左连接的功能。 日期是 var mongoose = require('mongoose') , Schema = mongoose.Schema var personSchema = Schema({ _id : Number, name : String }); var storySchema = Schema({ _creator : { type: Number, ref: 'Person' }, title
var mongoose = require('mongoose')
, Schema = mongoose.Schema
var personSchema = Schema({
_id : Number,
name : String
});
var storySchema = Schema({
_creator : { type: Number, ref: 'Person' },
title : String
});
var personProfile = Schema({
userid : {type: Number, ref: 'Person'},
birthday: Date,
profilelink: String,
email: String
});
var Story = mongoose.model('Story', storySchema);
var Person = mongoose.model('Person', personSchema);
var personProfile = mongoose.model('Personprofile', personProfile );
我将用用户配置文件显示故事模型。
我们必须通过故事的创建者和personProfile的用户ID来获取个人资料信息
如何使用mongoose查询获取信息
感谢Nelis因为mongodb上没有join语句,所以您尝试执行的操作是不可能的 您可以通过两种方式实现这一点: 1-By DBRefs:将模式更改为包含所有用户信息的模式,并且不要像现在这样将其拆分为两个不同的模式,请参阅。然后,您可以使用该函数获取所有人员数据 2-通过手动引用:第二种解决方案是使用userid作为过滤器再次调用数据库,获取personProfile数据 例1: 这样,无需再次调用数据库即可获取所有人员数据
var personSchema = Schema({
_id : Number,
name : String,
birthday: Date,
profilelink: String,
email: String
});
var storySchema = Schema({
_creator : { type : Schema.Types.ObjectId, ref: 'Person' },
title : String
});
Story
.find()
.populate(['_creator'])
.exec(function(err, stories) {
//do your stuff here
}
请注意,我使用的是类型Schema.Types.ObjectId,而不是编号。通过这种方式,您可以通过传递\u id或person对象给\u creator分配一个新值,猫鼬会将对象转换为其\u id。例如,您可以发布类似
{
_creator : {
_id : 123123123123,
name : 'Foo',
birthday: '0000-00-00',
profilelink: 'http://foo.bar',
email: 'foo@bar.com'
},
title : 'Mr'
}
。。。猫鼬将转变为
{
_creator : 123123123123,
title : 'Mr'
}
例2:
这样,您的数据仍然是标准化的,您可以通过第二次调用获取所有人员数据
Story
.find()
.exec(function(err, stories) {
var arrayLength = stories.length;
for (var i = 0; i < arrayLength; i++) {
var story = stories[i];
personProfile.findById(story._creator, function (err, person) {
story._creator = person;
}
};
// do your stuff here
}
故事
.find()
.exec(函数(错误、故事){
var arrayLength=stories.length;
对于(变量i=0;i
您的意思是通过Mongoose或其他方式跟踪参考文献吗?您是否可以编辑您的问题,以包括您正在使用的查询和所需的输出?