sql >> Base de Datos >  >> NoSQL >> MongoDB

cómo implementar la función como combinación izquierda de mysql en mongoose

Lo que está tratando de hacer no es posible porque no hay una declaración de unión en mongodb.

Puede lograr esto de dos maneras:

1 - Por DBRefs: Cambiando su esquema a uno que incluya toda la información del usuario y no los divida en dos esquemas diferentes como lo está haciendo, vea desnormalizado . Luego puede usar la Población función para obtener todos los datos de las personas.

2 - Por referencias manuales: La segunda solución es hacer una segunda llamada a la base de datos obteniendo los datos de personProfile usando el ID de usuario como filtro.

Ejemplo 1:

De esta manera, puede obtener los datos de todas las personas sin una segunda llamada a la base de datos.

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
}

Observe que estoy usando el tipo Schema.Types.ObjectId y no el Número . De esta forma, puedes asignar un nuevo valor a _creator pasando el _id o el objeto persona y la mangosta convertirá el objeto a su _id. Por ejemplo, puedes publicar algo como

{
    _creator : {
        _id     : 123123123123,
        name    : 'Foo',
        birthday: '0000-00-00',
        profilelink: 'http://foo.bar',
        email: '[email protected]'
    },
    title    : 'Mr'
}

... y la mangosta se convertirá en

{
    _creator : 123123123123,
    title    : 'Mr'
}

Ejemplo 2:

De esta manera, sus datos aún se normalizarán y podrá obtener todos los datos de las personas con una segunda llamada.

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
}