根据对象属性查询 Mongoose 文档

Posted

技术标签:

【中文标题】根据对象属性查询 Mongoose 文档【英文标题】:Query Mongoose Documents Based on Object Properties 【发布时间】: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 不会被检索到。

【问题讨论】:

【参考方案1】:

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

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

【讨论】:

谢谢。我以前试过这个,但我使用了错误的语法,所以它不起作用。我已经更新了我的查询以反映您的建议,并且我得到了我想要的结果。谢谢,谢谢,谢谢! 这是在架构中组织数据的好方法,还是搜索大量用户/标签效率低? 感谢您的回答。像魅力一样工作!

以上是关于根据对象属性查询 Mongoose 文档的主要内容,如果未能解决你的问题,请参考以下文章

mongo+mongoose+express

查询未在 Mongoose 模型中定义的文档

Mongoose:通过 findOneAndUpdate 查询使用嵌套对象数组的总和更新父子数据属性不起作用

如何从 mongoose 的 mongo 文档中返回一个数组?

如何在 Mongoose 中增加子文档的属性?

从 Mongoose Find() 查询向对象数组添加属性 [重复]