問題は次のように説明できるようです。クラスでObjectIdの代わりにStringを使用し、それらのIDを他のドキュメント(および埋め込みドキュメント)の参照(dbrefなし)として使用する場合、それらはプッシュされます。文字列として(文字列なので問題ありません)。 Springデータはそれらをobjectidに再度マップできるため問題ありませんが、前述のようなクエリを実行する場合は問題ありません。フィールドは比較でオブジェクトID(この場合は$ ne演算子)に変換されますが、埋め込みドキュメントでは文字列と見なされます。したがって、まとめると、私の意見では、この場合の$ne演算子はフィールドを文字列と見なす必要があります。
私の解決策は、IDが参照であるドキュメントにオブジェクトIDとして文字列を格納するカスタムコンバーターを作成することでした
public class VoteWriteConverter implements Converter<Vote, DBObject> {
@Override
public DBObject convert(Vote vote) {
DBObject dbo = new BasicDBObject();
dbo.put("userid", new ObjectId(vote.getUserid()));
dbo.put("value", vote.getValue());
return dbo;
}
}