Вот моя попытка запроса ответ AFTER
Серджиу Zaharie был размещен ниже:Фильтрация .find() на основе другого документа возвращает []
db.collection('users').find({_id:ObjectID('561f0cbd3ed5b852e95cab6a')}).limit(1).toArray(function(error, result) {
if((!error) && (result[0] !== undefined) && result.length) {
var user = result[0];
console.log("User ID: ", user._id);
console.log("Blocked users: ", user.blocked_users);
console.log("passed quizzes: ", user.passed_quizzes);
console.log("failed quizzes: ", user.failed_quizzes);
db.collection('users').find({
$and: [
{ _id: { $in: [user._id] } },
{ blocked_users: { $nin: [user.blocked_users] } },
{ passed_quizzes: { $nin: [user.passed_quizzes] } },
{ failed_quizzes: { $nin: [user.failed_quizzes] } }
]
}).toArray(function(error, doc) {
console.log("Results: ", doc);
});
}
});
Там три пользователей в таблице, одна с ObjectID('561f0cbd3ed5b852e95cab6a')
(мне), один с ObjectID('561f0bbaff803840e917568d')
(майкл) и один с ObjectID('561f0b68d83c293fe960a25d')
(thomas).
Выполненный запрос должен был вернуть учетную запись с ObjectID('561f0bbaff803840e917568d')
(Michael), а запрос возвратил []
0 результатов.
Вывод данных:
User ID: 561f0cbd3ed5b852e95cab6a
Block users: [ 561f0b68d83c293fe960a25d ]
passed quizzes: []
failed quizzes: []
Results: []
Это сделает запрос выполняется следующим образом:
db.collection.find({
$and: [
// Void out myself, because I'm looking for other people.
{ _id: { $nin: [ ObjectID('561f0cbd3ed5b852e95cab6a') ] } },
// Void out blocked users, because I blocked them.
{ blocked_users: { $nin: [ObjectID('561f0b68d83c293fe960a25d')] } },
// More array based filtering: (Blank arrays, shouldn't matter right now)
{ passed_quizzes: { $nin: [] } },
{ failed_quizzes: { $nin: [] } }
]
});
Как уже говорилось, это оставляет место для документа с ObjectID('561f0bbaff803840e917568d')
возвращенной заявление находкой(). Поскольку он не фильтруется в соответствии с указанными выше требованиями.
После @ ответ Серджиу, я переписали вопрос более программирования ориентированный вопрос. – Hobbyist
Вы не должны переписывать свой вопрос, но вместо этого задайте новый вопрос - теперь ответ @Sergui не имеет смысла ..... – Soren