Mongodb 基于其他文档筛选.find()将返回[]
下面是我在Sergiu Zaharie的答案发布到下面之后对查询的尝试:Mongodb 基于其他文档筛选.find()将返回[],mongodb,mongodb-query,Mongodb,Mongodb Query,下面是我在Sergiu Zaharie的答案发布到下面之后对查询的尝试: db.collection('users').find({_id:ObjectID('561f0cbd3ed5b852e95cab6a')}).limit(1).toArray(function(error, result) { if((!error) && (result[0] !== undefined) && result.length) {
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')
(me),一个是ObjectID('561f0bbaff803840e917568d')
(michael),一个是ObjectID('561f0b68d83c293fe960a25d')
(thomas)
上面执行的查询应该返回带有对象ID('561F0BBAFF80840E917568D')
(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: [] } }
]
});
如上所述,这为find()语句返回带有ObjectID('561F0BBAFF80840E917568D')
的文档留出了空间。因为它没有按照上述要求进行过滤 尝试此查询:
db.collection.find(
{ [
{_id: { $nin: [id] }},
{ "settings.min_rating": { $lt: rating }},
{ "settings.max_rating": { $gt: rating }},
{ blockedUsers: { $nin: [id] }},
{ discoveredUsers: { $nin: [id] }}
]
}
)
$和
是假设的,你甚至不需要它。我在我的问题中添加了大量的信息,试图用你的例子来实现我的查询,但是查询总是返回[]
时出现了一些问题,请将你的答案修改为{id:{$nin:[id]}
,我会接受它。{id:{$nin:[id]}
addedAfter@Sergiu的答案我已经将这个问题改写为一个更面向编程的问题。你不应该重新编写你的问题——而是问一个新问题——现在@Sergui答案毫无意义。。。。。