Node.js 如何在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

我将在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    : 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 idperson对象给\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或其他方式跟踪参考文献吗?您是否可以编辑您的问题,以包括您正在使用的查询和所需的输出?