【发布时间】:2020-05-07 15:23:55
【问题描述】:
我的数据库中有以下架构:
{
_id: Number,
reagents: [ //Array of objects (embedded) FIND IF certain tag in v_class occurred only once in array
{
_id: Number,
v_class: Array, //A single array (string only): ['TEST','PREMIUM']
},
{
_id: Number,
v_class: Array, //A single array (string only): ['TEST','PREMIUM']
},
{
_id: Number,
v_class: Array, //A single array (string only): ['TEST','PREMIUM']
}
],
other_fields: other_values,
}
问题在于:
如何只找到那些文档,其中
reagents字段只有一项(试剂、嵌入文档),其中v_class数组字段包含单词PREMIUM。
因此,从上面选定的集合中,我只想拥有带有 _id: 2 的文档,因为它是 reagents 字段具有 THE ONLY 文档的唯一文档,其中字段名为 v_class 字PREMIUM 只出现一次。
UPD:我在$group阶段,MongoPlayground(组后)之后取得了一些简单的结果。所以就目前而言,我仍然需要找到 v_class 数组字段在其数组中出现 PREMIUM 值恰好一次的文档`
UPD2:我有新版本出现了。 MongoPlayground。这个查询很好,但它显示了所有PREMIUM,除了只出现一次。
【问题讨论】:
-
在您的示例中,
v_class的reagents数组中没有带有单个PREMIUM的文档。 -
或者您想查找在任何 v_classes 中恰好出现一次“premium”的文档(不是 v_class 的唯一元素)?
-
@MickaelB。单并不意味着
v_class数组字段将只有["PREMIUM"]值,这意味着我只需要找到一个文档,v_class= 包含PREMIUM所以它可能像 `['X', '高级'] -
@Oleg,你说得对,非常感谢你指出我,我会更正描述。
标签: javascript mongodb mongoose mongodb-query aggregation-framework