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中创建一个新日期。