MongoDB
 sql >> Baza danych >  >> NoSQL >> MongoDB

MongoDB, Mongoose:Jak znaleźć poddokument w znalezionym dokumencie?

Musisz albo utworzyć NOWY schemat dla osadzonych dokumentów, albo pozostawić deklarację typu jako pustą tablicę, więc mongoose interpretuje jako Mixed typ.

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

-- LUB --

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 potem możesz w ten sposób zaoszczędzić:

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

user.save();

Stąd możesz po prostu użyć prymitywów tablicy, aby znaleźć osadzone dokumenty:

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

-- LUB --

Możesz użyć specjalnego id() metoda w osadzonych dokumentach do wyszukiwania według identyfikatora:

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

Możesz przeczytać więcej tutaj:http://mongoosejs.com/docs/subdocs.html

Upewnij się, że NIE zarejestruj schemat z mangustą, w przeciwnym razie utworzy nową kolekcję. Należy również pamiętać, że jeśli dokumenty podrzędne są często przeszukiwane, dobrym pomysłem byłoby użycie ref i populacji, jak poniżej. Mimo że trafia do bazy danych dwukrotnie, jest znacznie szybszy z powodu indeksowania. Również mongoose będzie bonk na podwójnych dokumentach zagnieżdżania (tj. Dzieci mają również dokumenty potomne)

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

Odpowiednie dokumenty można znaleźć tutaj http://mongoosejs.com/docs/populate.html



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Usuń według _id w konsoli MongoDB

  2. 5 sposobów na wstawianie dokumentów do MongoDB

  3. Zaktualizuj pole w dokładnej tablicy elementów w MongoDB

  4. Zapytanie Mongodb oparte na pozycji w określonej pozycji w tablicy

  5. Utwórz klaster baz danych w chmurze za pomocą MongoDB Atlas