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

ryhaxcpt  于 2022-11-13  发布在  Go
关注(0)|答案(3)|浏览(159)

我尝试基于以下mongodb查询来查询我的mongodb集合中的一个用户:
db.users.find("boxes":{"$elemMatch":{"a":"foo","b":"bar"}})
如果我直接使用mongodb进行查询,它会返回任何一个框中有a=“foo”和b=“bar”的用户。
我如何在mongoosejs中查询这个呢?我试过使用User.find().elemMatch,但是它不起作用。看起来它只是投影结果而已。原始的mongodb查询对我来说确实有效,我只需要能够在mongoosejs中复制它。有什么想法吗?

jq6vz3qz

jq6vz3qz1#

这里是mongoose中的elemMatch文档。
我还没有测试过,但看起来你会想要
User.find().elemMatch("boxes", {"a":"foo","b":"bar"})

ppcbkaq5

ppcbkaq52#

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

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

6jygbczu3#

这是使用$elemMatch的正确方法。我不能测试你的确切查询,因为我没有你的模式。但有几种方法:

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

但是在你的例子中,你看起来像是在试图查询一个数组元素的属性。你也可以这样做:

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

相关问题