根据对象属性查询猫鼬文档

bip*_*kle 3 arrays mongoose mongodb node.js

我有以下猫鼬模式:

var UserSchema = new Schema({
  name: String,
  age: Number,
  ...
  tags: [{
    text: String,
    ...
  }]
});
Run Code Online (Sandbox Code Playgroud)

和以下数组:

var tagTexts = ['tall', 'small', 'green', 'blue'];
Run Code Online (Sandbox Code Playgroud)

我想检索所有包含至少一个带有tagTexts中的text属性的标签的用户文档。

例如,如果我有以下用户和tagTexts数组

[{
  name: 'Bob',
  age: 17,
  ...
  tags: [{
    text: 'small',
    ...
  }]
}, {
  name: 'Bill',
  age: 29,
  ...
  tags: [{
    text: 'dandelion',
    ...
  }, {
    text: 'oak',
    ...
  }]
}]

var tagTexts = ['tall', 'small', 'green', 'blue'];
Run Code Online (Sandbox Code Playgroud)

这样鲍勃就会被找回,但比尔不会。

Joh*_*yHK 5

您可以使用$in匹配值数组,并使用点表示法texttags数组的每个元素内的字段作为目标。任何匹配项都会导致文档包含在结果中。

var tagTexts = ['tall', 'small', 'green', 'blue'];
User.find({'tags.text': {$in: tagTexts}}, function(err, users) {...});
Run Code Online (Sandbox Code Playgroud)