2015-02-01 2 views
0

У меня есть два документа, buyers и submission (представления являются поддокументом покупателей).Mongoose - поддокумент запроса, сравнить элементы в родительском и дочернем объекте

mongoose.model('Buyer',{ 
    username: String, 
    credit: Number, 
    forms:[mongoose.model('Submission').schema] 
}); 

и

mongoose.model('Submission',{ 
    title: String, 
    bid: Number, 
}); 

Каждый покупатель имеет атрибут credit и каждый submission имеет атрибут ставка. Я хочу построить запрос, который будет искать любую заявку, где ставка ниже ее parent.credit

Можно ли найти на основе сравнения атрибутов parent-child?

ответ

2

Вы не можете сравнивать два поля (будь то вложенные документы или нет) в mongodb, используя обычные поисковые запросы (если вы не use the $where, но имейте в виду, что он довольно медленный, потому что он выполняет этот javascript для каждого документа).

Однако то, что вы хотите, можно с трубопроводом агрегации:

db.buyers.aggregate([ 
    {$unwind: "$forms"}, 
    {$project: { 
     username : 1, 
     credit : 1, 
     forms : 1, 
     lower : {"$cond" : [{$lt: [ '$forms.bid', '$credit']}, 1, 0]} 
    }}, 
    {$match : {lower : 1}} 
]); 

Это поможет вам запись, где ставка ниже, чем кредит.

Смежные вопросы