Sails.js 和 Waterline:查找搜索词在数组或嵌套对象中的位置

Sails.js and Waterline: Finding Where Search Term is in the Array or Nested Object

我正在尝试使用来自 Sails.js 的 Waterline 编写一个复杂的查找查询。这是我正在查找的对象的简化示例:

基本上,我想编写一个查询,其中提供的搜索字符串可以等于 id、在 myArray 属性中,或者是 myNestedObject.nestedAttribute 的值。

我知道我可以这样做:

MyModel.find().where({ or: [] });

.where() 中作为 or 提供的数组是应该添加匹配项的地方,如下所示:

{ id: { 'contains': searchTerm } }

如何使用 Waterline 进行查询,我可以在其中提供搜索词 (searchTerm) 以查看该值是否在 myArray 对象中?以及如何检查嵌套属性?我正在使用 sails-mongo 适配器,但我不想编写任何 Mongo 特定查询,这样我就可以在将来享受使用 ORM 的所有好处(比如如果我们离开Mongo 之类的)。

无法使用标准水线查询语法在嵌入内搜索,但您可以尝试:

  1. 以不同的方式构建数据。
  2. 使用 mongo native query.
  3. 使用 .stream() 并一条一条地检查每条记录,如果这个查询不是 延迟敏感(例如计划作业或迁移脚本)。