db.getCollection('employee').find({"departments.status" : "A"})
{
"firstName" : "Sichita",
"lastName" : "Vinchurkar",
"email" : "svinchurkar@gmail.com",
"departments" : [
{
"deptName" : "IT Support",
.......
.......
"status" : "A"
},
{
"deptName" : "Mobile Development",
.......
.......
"status" : "I"
},
{
"deptName" : "Advisory Dept",
.......
.......
"status" : "A"
},
.........
..........
.........
}
解决方案是使用MongoDB Spring Data(v2.2.6)MongoTemplate
API的聚合。使用find
查询(因此使用聚合的$filter
数组运算符)无法检索基于条件的特定数组元素。
MongoOperations mongoOps = new MongoTemplate(MongoClients.create(), "test");
Aggregation agg = newAggregation(
match(Criteria.where("departments.status").is("A")),
project()
.and(filter("departments")
.as("dept")
.by(Eq.valueOf("dept.status").equalToValue("A")))
.as("departments")
);
AggregationResults<Document> results = mongoOps.aggregate(agg, "collection", Document.class);
results.forEach(doc -> System.out.println(doc.toJson()));
[编辑与添加]
包括代码中使用的类和接口的import
语句:
import org.springframework.data.mongodb.core.MongoOperations;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.aggregation.Aggregation;
import org.springframework.data.mongodb.core.aggregation.AggregationResults;
import static org.springframework.data.mongodb.core.aggregation.Aggregation.newAggregation;
import static org.springframework.data.mongodb.core.aggregation.Aggregation.match;
import static org.springframework.data.mongodb.core.aggregation.Aggregation.project;
import static org.springframework.data.mongodb.core.aggregation.ArrayOperators.Filter.filter;
import static org.springframework.data.mongodb.core.aggregation.ComparisonOperators.Eq;
我用Mongoose定义了以下模式: 我尝试执行以下查询: 查询不响应,并且从不进入回调函数。这很奇怪,因为这种类型的查询(搜索两个字符串字段)适用于我定义的另一个模式,但不适用于这个模式。另一种模式更简单,不需要任何嵌入文档。 [更新] 我试过你的建议,但不行。我认为只有两个选择: 1.我发布的模式有问题。 多谢!
列名称的类型为int[] 上述查询适用于postgresql,但不适用于hsqldb,甚至适用于sql 尝试的hsqldb版本:2.2.9和2.3.0 在hsqldb中工作的sql是从table_name中选择x,unnest(column_name)y(x)x和y不是该表的列。
问题内容: 有人告诉我: 垂直对齐仅适用于内联,内联块,图像和表格元素。 与text-align不同,它必须应用于子元素,而不是应用于父元素。 但是,当我尝试在内联块元素上设置垂直对齐中间时,它不起作用。为什么? 问题答案: 这是行不通的,因为它vertical- align设置了行内内容相对于其行框而不是其包含块的对齐方式: 此属性影响由inline-level元素生成的框的线框内的垂直位置。
我使用jaxb 3.0.0(xjc.sh)来创建Java类,但出于某种原因,它不尊重嵌入式绑定。jaxb 2.3.1也可以正常工作 $pwd/c/jaxb-ri-3.0.0/jaxb-ri/bin xjc.shValidation.xsd 它正在创建ApiValidator。java,我希望它不会创建一个新的绑定,而不是引用我作为嵌入绑定的绑定。 a/model/ApiValidator。java
问题内容: 此查询出了什么问题: 它在没有该子句的情况下起作用。我似乎忘记了我的SQL。 问题答案: MySQL INSERT语法不支持WHERE子句,因此您的查询将失败。假设您的列是唯一键或主键: 如果您要插入ID为1的新行,则应使用: 如果您尝试更改ID为1的现有行的weight / desiredWeight值,则应使用: 如果需要,还可以使用INSERT .. ON DUPLICATE K
问题内容: 您好,我想按查询排除某些字段。我正在使用nodejs 但在结果集中,我一直在获取密码字段。 问题答案: 投影不适用于新的nodejs mongodb驱动程序…相反,您将不得不在 此处使用游标方法