Mongodb 基于其他文档筛选.find()将返回[]

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) {

下面是我在Sergiu Zaharie的答案发布到下面之后对查询的尝试:

    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答案毫无意义。。。。。