我有第一个模特儿:
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)
});但我想通过给出名字而不是一个人的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, ref: 'Person' }],
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);
});这是可行的!感谢您的回答和编辑。
发布于 2016-03-24 22:06:54
在您的couple模型中,person1是一个ObjectID (我知道您知道这一点),因此它没有明显的属性.firstname。
实际上,实现这一点的最好方法是根据用户的名字找到该用户,然后使用该用户的id查询这对夫妇。
此方法可以/应该作为静态方法存在于couple模型中(简化的代码示例):
couple.statics.findByPersonFirstname = function (firstname, callback) {
var query = this.findOne()
Person.findOne({firstname: firstname}, function (error, person) {
query.where($or: [
{person1: person._id},
{person1: person._id}
]).exec(callback);
})
return query
}编辑:还要注意引用必须是_id (所以你不能用名字存储,这无论如何都不是一个好主意)。
考虑到您的编辑:
Person._id可能是一个String,引用是一个ObjectId,如果是这样,请尝试:
{person1: mongoose.Types.ObjectId(Person._id)}另外,您的变量是person而不是Person。尝试登录person,看看是否收到了什么信息。
最后,我的代码示例非常简单,不要忘记处理错误和所有错误(请参阅我上面给您的链接,它是完整的)。
https://stackoverflow.com/questions/36201689
复制相似问题