我已经可以在mongoshell上执行所需的查询,但是我需要使用Java和MongoOperations进行相同的查询。使用MongoOperations删除Mongo上的多个阵列条目
我已经检查 this的问题,这是非常相似,但它只有一个条件,因为我的有两个,并使用$gte
和$lt
运营商。这里的工作蒙戈查询:
db.getCollection('example').update({"idVar": "desiredValued"}, { $pull: { "listaHoras": { $gte: ISODate("2016-11-06T05:50:00.000Z"), $lt: ISODate("2016-11-06T06:30:00.000Z")}}})
样品DOC:
"_id" : ObjectId("58221b4610a3c71f1894ce75"),
"idVar" : "56b11259272f5515b05d70bc",
"date" : ISODate("2016-11-06T03:00:00.000Z"),
"listaHoras" : [
ISODate("2016-11-06T05:40:00.000Z"),
ISODate("2016-11-06T06:30:00.000Z"),
ISODate("2016-11-06T06:40:00.000Z")
]
我将在其中有ISODATE
在Java中的Date
变量,desiredValue
作为一个字符串变量。
到目前为止,我有我做了以下,使用前面提到的问题为例:
BasicDBObject match = new BasicDBObject("idVar", desiredValue); // to match your document
BasicDBObject update = new BasicDBObject("listaHoras", new BasicDBObject("itemID", "1"));
coll.update(match, new BasicDBObject("$pull", update));
但是,正如你所看到的,这是不等同于所需的查询。由于$pull
的匹配与“1”匹配"itemID"
。我不知道,也找不到如何在相同的查询中正确使用$gte
和$lt
。无论如何只使用其中的一个或两个。我知道它可以完成,如在 MongoOperatioons API上看到的那样:
“更新 - 包含更新对象或操作现有对象的$操作符的更新文档。
任何人都知道如何做到这一点?如果Java中的Date
类型与Mongo中的ISODATE
匹配,
请添加示例文档进行测试。 – Veeram
添加样例文档。 –