MongoDB
 sql >> Teknologi Basis Data >  >> NoSQL >> MongoDB

MongoDB, Mongoose:Bagaimana menemukan subdokumen dalam dokumen yang ditemukan?

Anda perlu membuat Skema BARU untuk dokumen yang disematkan, atau membiarkan deklarasi tipe sebagai larik kosong sehingga mongoose ditafsirkan sebagai Mixed ketik.

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

-- ATAU --

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

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

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

Dan kemudian Anda dapat menyimpan dengan cara ini:

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

user.save();

Dari sini, Anda cukup menggunakan array primitif untuk menemukan dokumen tersemat Anda:

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

-- ATAU --

Anda dapat menggunakan id() special khusus metode dalam dokumen yang disematkan untuk dicari berdasarkan id:

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

Anda dapat membaca lebih lanjut di sini:http://mongoosejs.com/docs/subdocs.html

Pastikan Anda JANGAN daftarkan skema dengan luwak, jika tidak maka akan membuat koleksi baru. Juga perlu diingat bahwa jika dokumen anak sering dicari, sebaiknya gunakan referensi dan populasi seperti di bawah ini. Meskipun menyentuh DB dua kali, itu jauh lebih cepat karena pengindeksan. Juga, mongoose akan menyukai dokumen bersarang ganda (yaitu Anak-anak juga memiliki dokumen anak)

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

Dokumen yang relevan dapat ditemukan di sini http://mongoosejs.com/docs/populate.html



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. MongoDB:perbarui setiap dokumen di satu bidang

  2. Kueri MongoDB / Pymongo dengan Datetime

  3. ekspor agregat mongoexport ke file csv

  4. Apakah ada cara untuk memulihkan dokumen yang baru dihapus di MongoDB?

  5. Apakah mongodb berjalan?