2016-10-18 6 views
0

「$非配列値に引っ張って適用することはできません」私は、以下のエンティティ&という名前のコレクションを持って、私は所有者IDが一致するエンティティを引くしようとしていますそれにスキーマのMongoDB更新クエリが返す

Entity { 
     Owner { 
      id 
     } 

     Tags [ 
      {id : 
       name : } 
      {id : 
       name : } 
     ] 
    } 

ある&タグIDはエンティティからタグを削除します。

BasicDBObject query = new BasicDBObject("Tags.id", tagId).append("Owner.id", ownerId); 

    BasicDBObject updQuery = new BasicDBObject("$pull", 
      new BasicDBObject("Tags", new BasicDBObject("id", tagId))); 
    updQuery.update(query, updQuery, true); 

エンティティはMongoJackDaoImplインスタンスです。

私はタグID &所有者のIDと一致する空の結果を引っ張るしようとすると、私は次の例外

com.mongodb.WriteConcernException: Write failed with error code 16836 and error message 'Cannot apply $pull to a non-array value' 
    at com.mongodb.operation.BaseWriteOperation.convertBulkWriteException(BaseWriteOperation.java:239) 

を取得するには避けるように、更新クエリで、空の結果をチェックする方法はありますエラー?

答えて

0

SELECTクエリから返された空のレコードがあるときに、どの更新に失敗したかによってUPSERTがfalseに設定されたため、エラーが発生しました。上記のコード

はBasicDBObjectコンストラクタでtrueにUPSERTのブール値を設定することで固定されている

BasicDBObject updQuery = new BasicDBObject("$pull", 
      new BasicDBObject("Tags", new BasicDBObject("id", tagId))); 
    updQuery.update(query, updQuery, true, true); 
関連する問題