ReactiveMongo:无法使用 Reactive Mongo Query DSL 从数组中删除文档

ReactiveMongo: Unable to remove document from array using Reactive Mongo Query DSL

我正在尝试使用反应式 mongo 查询 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. 

我正在使用 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);

在以上@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);