mongoshellですでに希望のクエリを実行できますが、JavaとMongoOperationsを使用して同じクエリを作成する必要があります。MongoOperationsを使用してMongoの複数の配列エントリを削除します
私は非常によく似ているが、鉱山には2つあり、$gte
と$lt
の演算子を使用しているため、1つの条件しかありません。ここで働いてMongoのクエリがあります:
db.getCollection('example').update({"idVar": "desiredValued"}, { $pull: { "listaHoras": { $gte: ISODate("2016-11-06T05:50:00.000Z"), $lt: ISODate("2016-11-06T06:30:00.000Z")}}})
サンプルドキュメント:私はJavaでDate
変数としてISODATE
、および文字列変数としてdesiredValue
があるでしょう
"_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")
]
。あなたが見ることができるように、これは目的のクエリと同等ではありません、
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
の一致は"itemID"
と "1"が一致しているためです。私は知らないし、$gte
と$lt
を同じクエリで正しく使用する方法も見つけられませんでした。どちらか片方だけを使用する方法も、両方を使用する方法もありません。
"更新 - 更新されたオブジェクトを含む更新ドキュメントまたは既存のオブジェクトを操作する$演算子"に記載されているように、これを行うことができます。
誰でもどのように行うことができますか?また、JavaのDate
タイプがMongoのISODATE
と一致する場合は、
テストのサンプルドキュメントを追加してください。 – Veeram
サンプル文書が追加されました。 –