检查数组是不是包含元素 mongodb

Posted

技术标签:

【中文标题】检查数组是不是包含元素 mongodb【英文标题】:Check array contain elements mongodb检查数组是否包含元素 mongodb 【发布时间】:2017-11-24 02:01:30 【问题描述】:
ArrayList<String> labels = (ArrayList) payload.get("labels");
Aggregation aggregation = newAggregation(
      match(Criteria.where("user_id").is(id).and("page_id").is(pageId).and("labels").in(labels)),
                sort(Sort.Direction.DESC, "meta_data.user_data.time"),
                group(Fields.fields().and("first_name", "$meta_data.user_data.first_name").and("last_name", "$meta_data.user_data.last_name").and("profile_pic", "$meta_data.user_data.profile_pic").and("user_id", "$user_id").and("labels", "$labels").and("access_times","$meta_data.access_times"))
      );

AggregationResults<UsersMongoResult> groupResults = mongoTemplate.aggregate(aggregation, "chatuser_log", UsersMongoResult.class);

在文档标签数组中是这样的labels: ["123", "456"]

当 ArrayList labels = ["123"] 结果匹配时 但是当 ArrayList labels = ["123", "789"] 它也匹配该文档。

如何克服这个问题?

【问题讨论】:

【参考方案1】:

来自in-operator的文档:

如果该字段包含一个数组,则 $in 运算符选择其字段包含一个数组的文档,该数组包含至少一个与指定数组中的值匹配的元素(例如 、 等)

如果要匹配包含所有指定值的数组,则需要all-operator

where("user_id").is(id).and("page_id").is(pageId).and("labels").all(labels))

【讨论】:

以上是关于检查数组是不是包含元素 mongodb的主要内容,如果未能解决你的问题,请参考以下文章

检查可选数组是不是包含元素和显示视图

检查数组元素是不是包含其他数组中的部分值[重复]

检查一个数组是不是包含 JavaScript 中另一个数组的任何元素

检查一个数组是不是包含 JavaScript 中另一个数组的任何元素

检查数组是不是包含元素 mongodb

如何检查数组是不是包含元素[重复]