如何在mongoose中使用elemMatch进行查询?

时间:2014-03-12 17:53:04

标签: node.js mongoose

我试图根据以下mongodb查询在我的mongodb集合中查询用户:

db.users.find("boxes":{"$elemMatch":{"a":"foo","b":"bar"}})

如果我直接用mongodb查询,这是有效的。它返回任何具有=" foo"的框的用户。和b =" bar"。

如何在mongoosejs中查询?我尝试过使用User.find().elemMatch,但它不起作用。无论如何,这似乎只是预测结果。原来的mongodb查询确实对我有用,我只需要能够在mongoosejs中复制它。有什么想法吗?

3 个答案:

答案 0 :(得分:9)

mongoose中elemMatch的文档是here 我没有对它进行过测试,但看起来你似乎想做

User.find().elemMatch("boxes", {"a":"foo","b":"bar"})

答案 1 :(得分:4)

Tim的回答是正确的,但如果有人对mongoose为mongo原生API的查询生成的内容感到困惑,我用这个来解决这个问题

mongoose.set('debug', function (coll, method, query, doc) {
    console.log(coll + " " + method + " " + JSON.stringify(query) + " " + JSON.stringify(doc));
});

答案 2 :(得分:0)

这是使用 $elemMatch 的正确方法。我无法测试您的确切查询,因为我没有您的架构。但有几种方法:

az resource show --ids "the-id" --query properties.actionGroups.groupIds

但在您的情况下,您似乎正在尝试查询数组元素的属性。你也可以这样做:

let users = await User.find({
        pet_names: { 
            $elemMatch: { 
                $eq: 'Rex'
            }
        }
    });