如何为MongoDB中的值执行NOT EXISTS

时间:2017-12-07 15:10:00

标签: mongodb mongodb-query

我很清楚如何将$exists用于文档中的键,但是如何针对键的特定值进行操作呢?

我有一个User集合和一个Log集合。对于所有可能的用户,我需要在一段时间内找到密钥中没有特定值的用户。

示例:我希望所有没有记录文档的用户使用key-valye对"action":"login"

我想这样做,首先我将所有用户ID放在一个数组中:

var allUsers = [];
db.Usuario.find({},{_id:0,terminal:1}).forEach(function(d){allUsers.push(d.terminal)});

但我对如何构建此操作的NOT EXISTS步骤感到困惑。 另外,是否有更有效的方法来实现上述用户阵列?

到目前为止我所拥有的:

db.Logging.find({
    /* what do I put in here? */,
    "terminal": { $in: allUsers },
    "timestamp": { $gte: dateToTimestamp('2017-12-06') }
})

1 个答案:

答案 0 :(得分:-1)

$ exists - 使用此密钥是否存在于特定文档中。

$in - 用于搜索数组中的内容,它在内部使用OR条件。

$nin - 我认为这是您正在寻找的东西,这用于获取数组中不存在的文档

Eg-db.inventory.find({qty:{$ nin:[5,15]}})db.inventory.find({qty:{$ nin:[5,15]}}){{1 }}