nutzam / nutzmongo

MongoDB 驱动的薄封装, 并入nutzmore项目,不再单独维护
https://nutz.cn
16 stars 15 forks source link

自定义的_id值查询 的时候有问题 #9

Open Rekoe opened 7 years ago

Rekoe commented 7 years ago

如果自定义的字符串类型的_id 会报 ObjectId 验证问题

ZMoDoc old = zMoCo.findOne(ZMoDoc.ID("rekoe"));

错误

2017-08-23 17:23:35,633 [DEBUG][org.mongodb.driver.protocol.query] - Query completed
Exception in thread "main" java.lang.RuntimeException: 'rekoe' not ObjectId
    at org.nutz.lang.Lang.makeThrow(Lang.java:132)
    at org.nutz.mongo.ZMoDoc.put(ZMoDoc.java:497)
    at org.nutz.mongo.ZMoDoc.putAll(ZMoDoc.java:558)
    at org.nutz.mongo.ZMoDoc.NEW(ZMoDoc.java:41)
    at org.nutz.mongo.ZMoDoc.NEW(ZMoDoc.java:82)
    at com.anawin.mongo.StudentService.fetch(StudentService.java:55)
    at com.anawin.mongo.StudentTest.main(StudentTest.java:16)
Rekoe commented 7 years ago

@zozoh

Rekoe commented 7 years ago

用的最新版的 nutzmongodb

wendal commented 7 years ago

_id只能是ObjectId,其他不合法的

Rekoe commented 7 years ago

有些时候 会自定义_id值 这情况下 就不能用了 但命令行是支持的 @wendal

zozoh commented 7 years ago

额,完全没有考虑到这个情况哦。 我都是自己开一个字段存自定义 ID 的 -_-!

好像还不太好改

ansjsun commented 7 years ago

+1.我们用的都是uuid。不过话又说回来。我没有用nutzmongo额。

Rekoe commented 7 years ago
ZMoDoc doc = ZMoDoc.NEW();
doc.setDBobj(new BasicDBObject("_id", "rekoe"));
DBCursor cursor = zMoDB.c("Student").find(doc);

@ansjsun 这样来用