Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/355.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Mongodb如何查询和更新此地图之类的数据<;字符串,Map<;字符串,对象>&燃气轮机;_Java_Mongodb_Aggregate Functions - Fatal编程技术网

Java Mongodb如何查询和更新此地图之类的数据<;字符串,Map<;字符串,对象>&燃气轮机;

Java Mongodb如何查询和更新此地图之类的数据<;字符串,Map<;字符串,对象>&燃气轮机;,java,mongodb,aggregate-functions,Java,Mongodb,Aggregate Functions,我的数据库中有这样一个文档: { "MyDiaries":[{ id:"diary1", "MyCalendar1" : { "Date1" : { "holidaytype" : "CHRISTMAS", "optional" : false } },

我的数据库中有这样一个文档:

{ "MyDiaries":[{    
            id:"diary1",
            "MyCalendar1" : {
                "Date1" : {
                    "holidaytype" : "CHRISTMAS",
                    "optional" : false
                }
            },
            "MyCalendar2" : {
                "Date1" : {
                    "holidaytype" : "CHRISTMAS",
                    "optional" : false
                },
                "Date2" : {
                    "holidaytype" : "NEWYEAR",
                    "optional" : true
                }
            }
        },
        {
            id:"diary2",
            "MyCalendar1" : {
                "Date1" : {
                    "holidaytype" : "CHRISTMAS",
                    "optional" : false
                }
            },
            "MyCalendar2" : {
                "Date1" : {
                    "holidaytype" : "CHRISTMAS",
                    "optional" : false
                },
                "Date2" : {
                    "holidaytype" : "NEWYEAR",
                    "optional" : true
                }
            }
        }
    ]
    }
它是Java中的
Map
。在插入数据时,我必须检查是否存在特定的日记和日历,以及它是否具有相同的日期

  • 如果是这样的话,那么我们必须重写
  • 如果没有,那么如果日历中不存在日期,则必须插入该日期
  • 如果日历本身不存在,那么我们必须创建一个新的日历
  • 请让我知道我该怎么做

    我已经有了这个,但它不起作用:

    Query query = new Query();
    Criteria criteria = getContextCriteria().and(CALENDAR).is(model.getRateCalendar())
          .and(DATE).is(model.getDate());
    query.addCriteria(criteria);
        update.(CALENDAR, getMyCalendars());//getMyCalendars() will give Map<String, Map<String, Object>>
    
    FindAndModifyOptions findAndModifyOptions = FindAndModifyOptions.options().upsert(true).returnNew(true);
    return mongoTemplate.findAndModify(query, update, findAndModifyOptions,clazz);
    
    Query Query=new Query();
    Criteria=getContextCriteria().and(CALENDAR).is(model.getRateCalendar())
    .and(DATE).is(model.getDate());
    query.addCriteria(条件);
    更新。(日历,getMyCalendars())//getMyCalendars()将提供映射
    FindAndModifyOptions FindAndModifyOptions=FindAndModifyOptions.options().upsert(真)。returnNew(真);
    返回mongoTemplate.findAndModify(查询、更新、findAndModifyOptions、clazz);
    
    不要考虑新日历(甚至日期名称),因为它是路径的一部分,将在插入日期
    文档时自动创建。Mongo Shell中的示例:

    db.calendars.update(
    {"Calendars.MyCalendarX.DateX": {$exists: true} }, 
    {$set: {"holidaytype": "CHRISTMAS", "optional": true}}, 
    {upsert: true}
    );
    
    此代码段创建或更新现有的

    db.calendars.update(
    {"Calendars.MyCalendarX.DateX": {$exists: false} }, 
    {$set: {"holidaytype": "CHRISTMAS", "optional": true}}, 
    {upsert: true}
    );
    
    此代码段不创建或更新任何现有代码

    db.calendars.update(
    {"Calendars.MyCalendarX.DateX": {$exists: false} }, 
    {$set: {"holidaytype": "CHRISTMAS", "optional": true}}, 
    {upsert: true}
    );
    
    如果MyDiaries是集合名称,则答案是:

    db.MyDiaries.update(
    {$and: [ {"id": "diary1"}, {"MyCalendarX.DateX": {$exists: true}}] }, 
    {$set: {"holidaytype": "CHRISTMAS", "optional": true}}, 
    {upsert: true}
    );
    

    到目前为止你做了些什么?现在我在我的问题中添加了,我是如何解决这个问题的谢谢,如果日历是集合中的一个文档(编辑了这个问题,请检查),并且必须查询特定的日志和日历以及要更新或添加的日期,那么我们如何包括这个三维查询。什么是“我的日记”?另一个文档中的字段?如果是,那么它的ID在哪里?或者这是集合名称(?),根文档的ID是:“diary1”和“diary2”?在“MyDiaries”是集合名称的情况下更新如果{“id”:“diary1”},{“MyCalendarX”存在但日期不存在,则我们必须在MyCalendarX中创建一个新日期。