使用$ ne和$或条件从ObjectId查询集合

时间:2016-02-24 20:49:12

标签: javascript node.js mongoose

我需要向用户提供一个未答复的(按用户)问题,其中用户模型包含过去使用数组提出的问题,比如说user.asked

我想澄清一下,我宣传了mongoose库,因此我正在使用这些函数,没什么特别的。

用户模型:

var UserSchema = new Schema({
    :
    asked: [{ type: Schema.Types.ObjectId, ref: 'Question' }]
})

这是我到目前为止所尝试的内容:

Question.findAsync({
    _id: {
        $ne: {
            $or: req.user.asked
        }
    }
})

结果:Cast to ObjectId failed for value \"[object Object]\" at path \"_id\"

我还尝试进行聚合(给出示例):

{
    $match: {
        _id: {
            $ne: {
                $or: [ ObjectId("56ccfb048f896e0c2d06d08f"), ObjectId("56ccfb048f896e0c2d06d98f") ]
            }
        }
    }
}

然而,这将返回集合中的所有文档(甚至是引用的文档)。

你有什么建议吗?

1 个答案:

答案 0 :(得分:1)

您可以使用$nin运算符查找一个字段与数组中没有任何值匹配的文档:

Question.findAsync({
    _id: { 
        $nin: [ObjectId("56ccfb048f896e0c2d06d08f"), ObjectId("56ccfb048f896e0c2d06d98f")]
    }
})