小编Dek*_*eka的帖子

MongoDB的聚合框架:仅匹配数组的匹配元素

我有一个"类"文件:

{
className: "AAA",
students: [
   {name:"An", age:"13"},
   {name:"Hao", age:"13"},
   {name:"John", age:"14"},
   {name:"Hung", age:"12"}
   ]
}
Run Code Online (Sandbox Code Playgroud)

我希望得到名字为"An"的学生,只获得数组"学生"中的匹配元素.我可以用函数find()做到这一点:

>db.class.find({"students.name":"An"}, {"students.$":true})
{
"_id" : ObjectId("548b01815a06570735b946c1"),
"students" : [ 
    {
        "name" : "An",
        "age" : "13"
    }
]}
Run Code Online (Sandbox Code Playgroud)

这很好,但是当我使用Aggregation执行相同操作时,会出现错误:

db.class.aggregate([
   {$match:{"students.name":'An'}},
   {$project:{"students.$":true}}
])
Run Code Online (Sandbox Code Playgroud)

错误是:

uncaught exception: aggregate failed: {
    "errmsg" : "exception: FieldPath field names may not start with '$'.",
    "code" : 16410,
    "ok" : 0
}
Run Code Online (Sandbox Code Playgroud)

为什么?我不能在aggregate()的$ project运算符中使用"$"作为数组,而在find()的项目运算符中可以使用这个.

mongodb aggregation-framework

6
推荐指数
1
解决办法
3657
查看次数

在get()上有没有克隆值的Java上的Map

我们已经知道,当我们从Map获取元素时,元素的值将被克隆,例如:

        Map<String, MyObject> map = new HashMap();        
        MyObject obj = new MyObject();
        //put
        map.put("id1", obj);
        //get
        MyObject obj1 = map.get("id1"); 
        MyObject obj2 = map.get("id1"); //"obj2" is only a clone of "obj1"

        //change some things
        obj1.setName("AAA");
        obj2.setName("BBB");

        //show: they are different
        obj1.printName(); //Print: AAA
        obj2.printName(); //Print: BBB
Run Code Online (Sandbox Code Playgroud)

但是,我想要一个返回原始实例的Map,是否有类似的Map?

        Map<String, MyObject> map = new AUnknownMap();        
        MyObject obj = new MyObject();
        //put
        map.put("id1", obj);
        //get
        MyObject obj1 = map.get("id1"); 
        MyObject obj2 = map.get("id1"); //"obj2" and "obj1" refer the same instance

        //change …
Run Code Online (Sandbox Code Playgroud)

java map

-2
推荐指数
1
解决办法
87
查看次数

标签 统计

aggregation-framework ×1

java ×1

map ×1

mongodb ×1