MongoDB
 sql >> Cơ Sở Dữ Liệu >  >> NoSQL >> MongoDB

MongoDB, Mongoose:Làm cách nào để tìm tài liệu phụ trong tài liệu đã tìm thấy?

Bạn cần tạo một Lược đồ MỚI cho các tài liệu được nhúng của mình hoặc để khai báo kiểu dưới dạng một mảng trống để mongoose diễn giải dưới dạng Mixed loại.

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

- HOẶC -

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

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

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

Và sau đó bạn có thể tiết kiệm như vậy:

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

user.save();

Từ đây, bạn có thể chỉ cần sử dụng các nguyên thủy của mảng để tìm các tài liệu được nhúng của mình:

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

- HOẶC -

Bạn có thể sử dụng id() đặc biệt trong tài liệu nhúng để tra cứu theo id:

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

Bạn có thể đọc thêm tại đây:http://mongoosejs.com/docs/subdocs.html

Hãy chắc chắn rằng bạn KHÔNG NÊN đăng ký lược đồ với mongoose, nếu không nó sẽ tạo một bộ sưu tập mới. Cũng nên nhớ rằng nếu các tài liệu con được tìm kiếm thường xuyên, bạn nên sử dụng các số tham chiếu và dân số như bên dưới. Mặc dù nó truy cập DB hai lần, nó nhanh hơn nhiều vì được lập chỉ mục. Ngoài ra, mongoose sẽ tham gia vào các tài liệu lồng đôi (tức là trẻ em cũng có tài liệu dành cho trẻ em)

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

Bạn có thể tìm thấy các tài liệu liên quan tại đây http://mongoosejs.com/docs/populate.html



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Không thể khóa tài liệu mongodb. Nếu tôi cần thì sao?

  2. MongoDB $ lookup objectid nhận được mảng trống?

  3. Nhà điều hành đường ống tổng hợp MongoDB $ đầu tiên

  4. insertMany Xử lý lỗi trùng lặp

  5. Làm cách nào để thêm id duy nhất hai cột vào mongodb trong ứng dụng sao băng?