私はアプリケーションの重大なバグを追跡しており、掘り下げた後、この例に分解しました。ジャクソン コレクションを使用して、ドキュメントを削除できません。通常、挿入したばかりの単一のドキュメントに対して機能します。次の例では、ユニットテスト コレクションを削除しようとしています。
import java.net.UnknownHostException;
import net.vz.mongodb.jackson.DBCursor;
import net.vz.mongodb.jackson.JacksonDBCollection;
import com.mongodb.DB;
import com.mongodb.DBCollection;
import com.mongodb.Mongo;
import com.mongodb.MongoException;
import com.test.model.Account;
public class MongoTest {
public static void main(String[] args) {
try {
Mongo mongo = new Mongo("localhost", 27017);
DB db = mongo.getDB("orion-unittest");
// get a single collection
DBCollection collection = db.getCollection("account");
JacksonDBCollection<Account, String> jacksonCollection = JacksonDBCollection.wrap(collection, Account.class, String.class);
// doesn't work
DBCursor<Account> jacksonCursor = jacksonCollection.find();
while (jacksonCursor.hasNext()) {
jacksonCollection.remove(jacksonCursor.next());
}
System.out.println(jacksonCollection.getCount());
// works!
com.mongodb.DBCursor cursor = collection.find();
while (cursor.hasNext()) {
collection.remove(cursor.next());
}
System.out.println(collection.getCount());
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (MongoException e) {
e.printStackTrace();
}
}
}
コンソール出力:
6
0
奇妙な点は、mongo サーバーのアクティビティを監視すると、削除コマンドが渡されていることがわかります。私は何かを見逃していますか、それともこれはジャクソンマッパーのバグですか?
ここに Account クラスがあります - そこには何もありません。id は _id キーで埋められます:
import net.vz.mongodb.jackson.Id;
public class Account {
@Id
String id;
String nickname = null;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getNickname() {
return nickname;
}
public void setNickname(String nickname) {
this.nickname = nickname;
}
}