如何在集合中使用多个组合字段过滤器查找文档?

3

以下是一些示例文件:

/* 1 */
{
    "_id" : ObjectId("566e80fcddf99fd898a11ad8"),
    "username" : "dummy_0",
    "score" : 10
}

/* 2 */
{
    "_id" : ObjectId("566e80fcddf99fd898a11ad9"),
    "username" : "dummy_1",
    "score" : 20
}

/* 3 */
{
    "_id" : ObjectId("566e80fcddf99fd898a11ada"),
    "username" : "dummy_1",
    "score" : 30
}

我希望获取所有没有 (用户名/分数) 这对信息的文档。

例如,如果我选择 用户名: dummy_1分数: 20,我应该检索到对象 1 和 3。

首先我尝试了:

db.foobar.find({ score: { $ne: 20}, username: { $ne: 'dummy_1'}})

但很明显这行不通。 您知道我如何实现这个目标吗?
3个回答

3
您可以使用逻辑$or运算符进行以下查询。
db.foobar.find( { 
    $or: [ 
        { "username": { $ne: "dummy_1" } }, 
        { "score": { $ne: 20 } } 
    ] 
})

非常简单。谢谢! :) - Alex

0
您可以使用逻辑运算符$or进行以下查询。

db.foobar.find( { 
    $or: [ 
        { "username": { $exists: false } }, 
        { "score": { $exists: false } } 
    ] 
})

它将返回所有没有 (用户名/分数) 这对存在的文档。


@RumeshEranga 是的,抱歉我的错误。谢谢你的纠正 :) - Ashutosh
顺便提一下,你的描述仍然说“$and”。也请编辑一下 :) - Rumesh Eranga Hapuarachchi

-1
你需要使用 "and" 运算符。你可以尝试下面的代码并查看结果。
db.foobar.find({ $and: [{score: { $ne: 20}}, {username: { $ne: 'dummy_1'}}]})

你在回答之前有没有自己尝试过这个查询? - Sarath Nair

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接