【问题标题】:Query Mongoose Documents Based on Object Properties根据对象属性查询 Mongoose 文档
【发布时间】:2015-08-08 17:50:06
【问题描述】:

我有以下 Mongoose 架构:

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

还有以下数组:

var tagTexts = ['tall', 'small', 'green', 'blue'];

我想检索至少包含一个标签的所有用户文档,该标签具有在 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'];

然后 Bob 会被检索到,但 Bill 不会被检索到。

【问题讨论】:

    标签: arrays node.js mongodb mongoose


    【解决方案1】:

    您可以使用$in 来匹配值数组,并使用点表示法来定位tags 数组的每个元素内的text 字段。任何匹配都会导致文档包含在结果中。

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

    【讨论】:

    • 谢谢。我以前试过这个,但我使用了错误的语法,所以它不起作用。我已经更新了我的查询以反映您的建议,并且我得到了我想要的结果。谢谢,谢谢,谢谢!
    • 这是在架构中组织数据的好方法,还是搜索大量用户/标签效率低?
    • 感谢您的回答。像魅力一样工作!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-24
    • 1970-01-01
    • 2013-11-25
    • 2021-11-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多