我有一个第一个模特人:
var personSchema = new Schema({ firstname: String,name: String }); module.exports = mongoose.model('Person',personSchema);
和第二个模型夫妇:
var coupleSchema = new Schema({ person1: [{ type: Schema.Types.ObjectId,ref: 'Person' }],person2: [{ type: Schema.Types.ObjectId,ref: 'Person' }] }); module.exports = mongoose.model('Couple',coupleSchema);
我发现一对人与ObjectId:
Couple.find({ 'person1': req.params.objectid }) .populate({ path: 'person1 person2' }) .exec(function (err,couple) { if (err) res.send(err); res.json(couple) });
但我想通过给出一个名字而不是一个Person的ObjectId来找到一对,就像那样:
Couple.find({ 'person1.firstname': "Bob" }) .populate({ path: 'person1 person2' }) .exec(function (err,couple) { if (err) res.send(err); res.json(couple) });
但它总是空的……
无论如何要解决这个问题?
感谢您的任何反馈.
编辑
我刚刚实现了答案:
让我们现在看看我的情侣模特:
var Person = require('mongoose').model('Person'); var coupleSchema = new Schema({ person1 : [{ type: Schema.Types.ObjectId,person2 : [{ type: Schema.Types.ObjectId,ref: 'Person' }] }); coupleSchema.statics.findByUsername = function (username,callback) { var query = this.findOne() Person.findOne({'firstname': username},function (error,person) { query.where( {person1: person._id} ).exec(callback); }) return query } module.exports = mongoose.model('Couple',coupleSchema);
有了这个用法:
Couple.findByUsername(req.params.username,function (err,couple) { if(err) res.send(err); res.json(couple); });
这样可行!感谢您的回答和编辑.
解决方法
在你的情侣模型中,person1是一个ObjectID(我知道你知道它),所以它显然没有属性.firstname.
实际上,实现此目的的最佳方法是通过它的名字找到用户,然后使用用户的id查询这对夫妇.
这个方法可以/应该作为静态方法(简化代码示例)站在耦合模型中:
couple.statics.findByPersonFirstname = function (firstname,callback) { var query = this.findOne() Person.findOne({firstname: firstname},person) { query.where($or: [ {person1: person._id},{person1: person._id} ]).exec(callback); }) return query }
编辑:还要注意,ref必须是_id(所以你不能用名字存储,无论如何这都是个坏主意).
考虑您的编辑:
Person._id可能是一个String,引用是一个ObjectId,如果是这样,请尝试:
{person1: mongoose.Types.ObjectId(Person._id)}
另外,你变量是人而不是人.尝试记录人,看看你是否得到了什么.
最后,我的代码示例非常简单,不要忘记处理错误和所有(请参阅上面给出的链接,这是完整的).
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。