sql >> Databáze >  >> NoSQL >> MongoDB

MongoDB, Mongoose:Jak najít vnořený dokument v nalezeném dokumentu?

Musíte buď vytvořit NOVÉ schéma pro vložené dokumenty, nebo ponechat deklaraci typu jako prázdné pole, takže mongoose interpretuje jako Mixed typ.

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

- NEBO --

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

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

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

A pak můžete uložit takto:

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

user.save();

Odtud můžete jednoduše použít primitiva pole k nalezení vložených 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' }
});

- NEBO --

Můžete použít speciální id() metoda ve vložených dokumentech k vyhledání podle id:

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

Více si můžete přečíst zde:http://mongoosejs.com/docs/subdocs.html

Ujistěte se, že NE registrujte schéma u mongoose, jinak vytvoří novou kolekci. Také mějte na paměti, že pokud jsou podřízené dokumenty často prohledávány, bylo by dobré použít reference a populace, jak je uvedeno níže. I když zasáhne DB dvakrát, je mnohem rychlejší díky indexování. Také mongoose bude bonk na dvojité vnoření dokumentů (tj. děti mají také dětské dokumenty)

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);
  });

Příslušné dokumenty lze nalézt zde http://mongoosejs.com/docs/populate.html



  1. Schéma Mongoose:„unikátní“ není respektováno

  2. Upozornění na vypršení platnosti klíče Redis s Jedisem

  3. node.js &express - globální moduly a osvědčené postupy pro strukturu aplikací

  4. Jak implementovat funkci časového limitu pubsub redis?