我坚持尝试_id在找到的文档中获取子文档.
示例模式
var User = mongoose.Schema({
name: String,
photos: [{src: String, title: String}]
});
var Team = db.model('Team', Team);
Run Code Online (Sandbox Code Playgroud)
现在我得到一个用户:
myUser = User.findOne(...)...
Run Code Online (Sandbox Code Playgroud)
我怎么能通过src它_id(或title)得到他的照片呢?
就像是:
myUser.photos.findOne({'_id': myId})
Run Code Online (Sandbox Code Playgroud)
srq*_*inn 45
您需要为嵌入文档创建一个新模式,或者将类型声明保留为空数组,以便mongoose将其解释为Mixed类型.
var userSchema = new mongoose.Schema({
name: String,
photos: []
});
var User = mongoose.model('User', userSchema);
Run Code Online (Sandbox Code Playgroud)
var userSchema = new mongoose.Schema({
name: String,
photos: [photoSchema]
});
var photoSchema = new mongoose.Schema({
src: String,
title: String
});
var User = mongoose.model('User', userSchema);
Run Code Online (Sandbox Code Playgroud)
然后你可以这样保存:
var user = new User({
name: 'Bob',
photos: [ { src: '/path/to/photo.png' }, { src: '/path/to/other/photo.png' } ]
});
user.save();
Run Code Online (Sandbox Code Playgroud)
从这里,您可以简单地使用数组原语来查找嵌入的文档:
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' }
});
Run Code Online (Sandbox Code Playgroud)
您可以使用id()嵌入式文档中的特殊方法按ID查找:
User.findOne({name: 'Bob'}, function (err, user) {
user.photos.id(photo._id);
});
Run Code Online (Sandbox Code Playgroud)
您可以在这里阅读更多内容:http://mongoosejs.com/docs/subdocs.html
确保不要使用mongoose注册模式,否则它将创建一个新集合.另外请记住,如果经常搜索子文档,最好使用如下所示的refs和population.即使它两次击中数据库,但由于索引,它的速度要快得多.此外,mongoose将双重嵌套文档(即孩子们也有儿童文档)
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);
});
Run Code Online (Sandbox Code Playgroud)
相关文档可以在http://mongoosejs.com/docs/populate.html找到
| 归档时间: |
|
| 查看次数: |
31413 次 |
| 最近记录: |