我正在尝试使用reactive mongo Query DSL从数组中删除文档。我的文档结构如下:
{
"_id" : ObjectId("55950666c3ad8c860b5141cc"),
"name" : "Texla",
-------------------------
"location" : {
"_id" : ObjectId("5595074bc3ad8c19105141d0"),
"companyFieldId" : ObjectId("559140f1ea16e552ac90e058"),
"name" : "Location",
"alias" : "Site",
"locations" : [
{
"_id" : ObjectId("5595074bc3ad8c19105141d1"),
"country" : "India",
"state" : "Punjab",
"city" : "Moga",
"zip" : "142001",
"custom" : false
},
{
"_id" : ObjectId("5595074bc3ad8c19105141d2"),
"country" : "India da address",
"custom" : true
}
]
},
------------------------
}
我使用“Reactive Mongo Extensions”的查询是:
genericCompanyRepository.update($doc("_id" $eq BsonObjectId.apply("55950666c3ad8c860b5141cc")), $pull("location.locations" $elemMatch("_id" $eq BsonObjectId.apply("5595074bc3ad8c19105141d1"))), GetLastError(), false, false);
使用上述更新声明。没有文件是从数组中拉出来的。查询有什么问题?
当我在功能下运行时,这将起作用。
genericCompanyRepository.findOne($doc("location.locations" $elemMatch("_id" $eq BsonObjectId.apply("5595074bc3ad8c19105141d1")))) function, the element is return.
答案 0 :(得分:1)
我正在使用 Play-ReactiveMongo 并使用mongo语法更新查询,如下所示:
db.collectionName.update({"_id" : ObjectId("55950666c3ad8c860b5141cc"),
"location.locations":{"$elemMatch":{"_id":ObjectId("5595074bc3ad8c19105141d1")}}},
{"$pull":{"location.locations":{"_id":ObjectId("5595074bc3ad8c19105141d1")}}})
此salat
mongo中的查询如下:
val query = List(MongoDBObject("_id" -> new ObejectId("55950666c3ad8c860b5141cc"),
"location.locations" -> MongoDBObject("$elemMatch" -> MongoDBObject("_id"-> new ObjectId("5595074bc3ad8c19105141d1")),MongoDBObject("$pull"-> MongoDBObject("location.locations" -> MongoDBObject("_id": new ObjectId("5595074bc3ad8c19105141d1"))))
并使用以下内容在集合中更新:
db.collectionName.update(query)
我没有直接使用reactive Mongo
,但在查看更新查询的代码后,您应该更改下面的语法,请注意以下查询语法未经测试。
genericCompanyRepository.update($doc("_id" $eq BsonObjectId.apply("55950666c3ad8c860b5141cc")
"location.locations" $elemMatch("_id" $eq BsonObjectId.apply("5595074bc3ad8c19105141d1")),
$pull("location.locations"("_id" $eq BsonObjectId.apply("5595074bc3ad8c19105141d1")),
GetLastError(), false, false);
答案 1 :(得分:1)
在Above @yogesh的帮助下,我解决了我的问题,以下是我更新的查询。
genericCompanyRepository.update($doc("_id" $eq BsonObjectId.apply("55950666c3ad8c860b5141cc"), "location.locations" $elemMatch("_id" $eq BsonObjectId.apply("5595074bc3ad8c19105141d1"))),
$pull("location.locations" $eq $doc("_id" $eq BsonObjectId.apply("5595074bc3ad8c19105141d1"))), GetLastError(), false, false);