sql >> Databasteknik >  >> NoSQL >> MongoDB

MongoDB, Mongoose:Hur hittar man underdokument i hittat dokument?

Du måste antingen skapa ett NYTT schema för dina inbäddade dokument eller lämna typdeklarationen som en tom array så att mongoose tolkar som en Mixed typ.

var userSchema = new mongoose.Schema({
  name: String,
  photos: []
});
var User = mongoose.model('User', userSchema);

-- ELLER --

var userSchema = new mongoose.Schema({
  name: String,
  photos: [photoSchema]
});

var photoSchema = new mongoose.Schema({
  src: String,
  title: String
});

var User = mongoose.model('User', userSchema);

Och då kan du spara så här:

var user = new User({
  name: 'Bob',
  photos: [ { src: '/path/to/photo.png' }, { src: '/path/to/other/photo.png' } ]
});

user.save();

Härifrån kan du helt enkelt använda arrayprimitiver för att hitta dina inbäddade dokument:

User.findOne({name: 'Bob'}, function (err, user) {

  var photo = user.photos.filter(function (photo) {
    return photo.title === 'My awesome photo';
  }).pop();

  console.log(photo); //logs { src: '/path/to/photo.png', title: 'My awesome photo' }
});

-- ELLER --

Du kan använda den speciella id() metod i inbäddade dokument för att söka efter id:

User.findOne({name: 'Bob'}, function (err, user) {
    user.photos.id(photo._id);
});

Du kan läsa mer här:http://mongoosejs.com/docs/subdocs.html

Se till att du INTE registrera schemat med mongoose, annars skapas en ny samling. Tänk också på att om barndokumenten söks ofta, skulle det vara en bra idé att använda refs och population som nedan. Även om det träffar DB två gånger, är det mycket snabbare på grund av indexering. Även mongoose kommer att bocka på dubbla kapslingsdokument (dvs. barnen har också barndokument)

var user = mongoose.Schema({
  name: String,
  photos: [{ type: Schema.Types.ObjectId, ref: 'Photo' }]
});

var photo = mongoose.Schema({
  src: String,
  title: String
});

User
  .findOne({ name: 'foo' })
  .populate('photos')
  .exec(function (err, user) {
    console.log(user.photos[0].src);
  });

Relevanta dokument finns här http://mongoosejs.com/docs/populate.html



  1. Mongodb Mongoimport för stor:Fel vid analysfel

  2. CDH 6.2 Release:Vad är nytt i HBase

  3. Hur sparar jag en fil i MongoDB?

  4. Hur utesluter man ett visst fält från en samling i Mongoose?