猫鼬:搜索数组

g12*_*23k 1 database mongoose mongodb node.js

我有这个架构:

new mongoose.Schema({
    providers : [{
            provider: { type: String, required: true },
            data : { type : String, unique: true }
        }]
});
Run Code Online (Sandbox Code Playgroud)

例如,一个项目可以是:

providers: [{provider: "linkedin", data: "abcd"},
            {provider: "twitter", data: "efgh"}]
Run Code Online (Sandbox Code Playgroud)

我想在Mongoose中搜索:provider =="linkedin"和data ="abcd".

你知道如何实现这个目标吗?

Joh*_*yHK 5

使用$elemMatch以匹配多个字段相同的元素:

Model.find({providers: {$elemMatch: {provider: 'linkedin', data: 'abcd'}}})
Run Code Online (Sandbox Code Playgroud)

以下也可以工作,但更脆弱,因为它需要元素的精确匹配,没有额外的字段和两个字段的顺序相同.

Model.find({providers: {provider: 'linkedin', data: 'abcd'}})
Run Code Online (Sandbox Code Playgroud)

  • 使用`$ elemMatch`而不是`db.w.find({providers:{provider:"linkedin",data:"abcd"}})`有什么好处? (2认同)