具有多个指定相同运算符的表达式的 mongodb 查询

Posted

技术标签:

【中文标题】具有多个指定相同运算符的表达式的 mongodb 查询【英文标题】:mongo Queries With Multiple Expressions Specifying the Same Operator 【发布时间】:2019-03-20 12:10:06 【问题描述】:

您好,我正在尝试在我的数据库中执行以下查询

function getChat(nameChat, nameUser, callback) 
global.db.collection('chatUsers').find( 
    $and: [ 
         $or : [  nameChat: nameChat ,  nameChat: nameUser  ] ,
         $or : [  nameUser: nameChat ,  nameUser: nameUser  ] 
    ]
).sort(date: 1).toArray(
    function (err, docs) 
        if (err) return console.log("algo deu errado" + err);
        console.log("exit\n"+docs+nameUser);
        callback(docs);
    
);

但查询返回空 这是我在聊天用户集合中拥有的对象的示例:

"_id":"5bc3e6d060d4da04dcd66517","nameChat":"Daciolo bolsominion","nameUser":"Mc Xhamps","date":"2018-10-14T17:22:00.000Z","msg":"Você pertence a URSAL"

"_id":"5bc52fc3b878631f84c77c41","nameChat":"Mc Xhamps","nameUser":"Daciolo bolsominion","date":"2018-10-01T17:25:00.000Z","msg":"E ai, bora ser Presidente"

为了明确,我希望我的查询返回名称为 Chat 或名称 User 的所有对象都存在于同一对象中 此查询仅返回空对象。

【问题讨论】:

【参考方案1】:

Hey Erik 改变 and 或者你会得到所需的结果。

global.db.collection('chatUsers').find( 
    $or: [ 
         $or : [  nameChat: nameChat ,  nameChat: nameUser  ] ,
         $or : [  nameUser: nameChat ,  nameUser: nameUser  ] 
    ]
).sort(date: 1)

【讨论】:

以上是关于具有多个指定相同运算符的表达式的 mongodb 查询的主要内容,如果未能解决你的问题,请参考以下文章

MongoDB聚合使用表达式运算符(函数)分组按条件计数统计案例一则

Spring Data (数据)MongoDB

运算符的分类用法

多个 + 和 - 运算符的 Java 优先级

使用堆栈将中缀表达式转换为前缀时,如果扫描和堆栈顶部的运算符具有相同的优先级,应该怎么做?

《MongoDB入门教程》第09篇 逻辑运算符