Có vẻ như có rất nhiều Q/A về chủ đề này trên stackoverflow, nhưng tôi dường như không thể tìm thấy câu trả lời chính xác ở bất cứ đâu.Mongoose truy vấn lồng nhau trên Mô hình theo trường của mô hình được tham chiếu
Những gì tôi có:
Tôi có Công ty và người mẫu:
var mongoose = require('mongoose');
var PersonSchema = new mongoose.Schema{
name: String,
lastname: String};
// company has a reference to Person
var CompanySchema = new mongoose.Schema{
name: String,
founder: {type:Schema.ObjectId, ref:Person}};
Những gì tôi cần:
Tìm tất cả các công ty mà mọi người với lastname "Robertson" đã thành lập
Tôi đã thử:
Company.find({'founder.id': 'Robertson'}, function(err, companies){
console.log(companies); // getting an empty array
});
Sau đó, tôi đã tìm thấy người không được nhúng nhưng tham chiếu, vì vậy tôi sử dụng populate để cư sáng lập-Person và sau đó cố gắng sử dụng tìm thấy với lastname 'Robertson'
// 1. retrieve all companies
// 2. populate their founders
// 3. find 'Robertson' lastname in populated Companies
Company.find({}).populate('founder')
.find({'founder.lastname': 'Robertson'})
.exec(function(err, companies) {
console.log(companies); // getting an empty array again
});
tôi vẫn có thể truy vấn các công ty có id của Person dưới dạng Chuỗi. Nhưng nó không chính xác những gì tôi muốn vì bạn có thể hiểu được
Company.find({'founder': '525cf76f919dc8010f00000d'}, function(err, companies){
console.log(companies); // this works
});
Bạn nói đúng, trông giống như mối nối. Tôi đã cho bạn truy vấn lồng nhau đơn giản nhất mà tôi đang nghĩ để triển khai, đó có thể là trường hợp mà DB quan hệ thuận tiện hơn. Nhưng dù sao, giải pháp của bạn đã hoạt động. Thnx! – AzaFromKaza
Xin chào, tôi đang tìm câu trả lời này vì tôi có cùng một vấn đề, một câu hỏi cuối cùng, liệu điều này có thay đổi hoặc có thể xảy ra trên mongoose 3.8.5 bây giờ không? Tôi nhận ra kể từ khi câu hỏi này đã được đăng mongoose upped một vài phiên bản. – maumercado
@maumercado Không, nó không thay đổi và không có khả năng. – JohnnyHK