node.js - 如何在 Mongoose 文档中选择具有匹配内部值的内部对象?

标签 node.js mongodb express mongoose

我对 Mongoose 有点陌生,不熟悉更复杂的查询,但本质上我试图选择具有两个匹配内部值的所有内部对象。

我试图选择所有已交互的内部消息对象(向同一个人发送和从同一个人接收)。例如,请注意“to”和“from”值如何匹配:

{
    "_id" : ObjectId("567f225438dh626f3f0d2767"),
    "messages" : {
        "sent": [
            { "to": "Bob", ... }
        ],
        "received": [
            { "from": "Bob", ... }
        ],
        ....
    },
    ....
}

因此,我希望返回 { "from": "Bob", ... } 内部对象,以及所有其他收到的具有相应匹配“发送到”值的消息。我该如何处理这种查询?

最佳答案

我的解决方案使用简单的嵌套 for 循环:

var received = user.messages.received || [],
    receivedCount = received.length,
    sent = user.messages.sent || [],
    sentCount = sent.length,
    results = [];

for (var r = 0; r < receivedCount; r++) {
    for (var s = 0; s < sentCount; s++) {
        if (sent[s] && sent[s].to &&
            received[s] && received[s].from &&
            sent[s].to === received[r].from) {
                results.push(received[s]);
        }
    }
}

关于node.js - 如何在 Mongoose 文档中选择具有匹配内部值的内部对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35029761/

相关文章:

Mongodb如何仅在不存在时插入(如果存在则不更新)?

javascript - Sequelize - 从数组批量创建

node.js - 如何跨 NodeJS 项目共享通用的客户端 javascript?

javascript - Node.js 中的 null 转义

javascript - 用 mocha 和 sinon 测试套接字

node.js - 如何优化 AWS Lambda?

c# - 如何使用 C# 驱动程序更新 MongoDB 中数组子文档中包含的数组子文档中的字段?

node.js - sudo npm 失败,env : node: No such file or directory

node.js - 穆特错误处理

mongodb 查询 : $size with $gt returns always 0