繁体   English   中英

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

[英]How can I query with elemMatch in mongoose?

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

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

如果我直接使用 mongodb 查询,这会起作用。 它返回任何拥有带有 a="foo" 和 b="bar" 的框的用户。

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

猫鼬中的 elemMatch 文档在这里
我没有测试过,但看起来你会想要做

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

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

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM