1

尝试在 Grails 的 id 字段中保存一些自定义内容:

Cover saveCover = new Cover(id: url, url: url, name: name, sku: sku, price: price)

但在 DB 中,我在 _id 字段中看到如下内容:52658d9284aea229e226ab9c。它让我感到困惑,因为它看起来像 ObjectId,但不是我发送到 Cover 域的字符串(顺便说一下 Cover 域字段 id 是 String)。

这里有什么问题?

4

3 回答 3

1

如果要使用自定义分配的 id 而不是生成的 id,则需要设置映射。

class Cover {
    String id
    String name
    String url
    String sku
    String price
    static mapping = {
        id generator: 'assigned'
    }
}
于 2013-12-09T14:04:33.000 回答
1

那是 MongoDb 自动为您生成的 ObjectID。请参阅:http ://docs.mongodb.org/manual/reference/object-id/

“如果未指定 _id 字段,MongoDB 使用 ObjectIds 作为 _id 字段的默认值。MongoDB 客户端应添加具有唯一 ObjectId 的 _id 字段。但是,如果客户端未添加 _id 字段,则 mongod 将添加 _id 字段拥有一个 ObjectId。”

如果要设置自己的 id ,请设置“_id”而不是“id”

于 2013-10-21T21:12:46.370 回答
1

PaddyDwyer 是对的,但我认为答案并不完整。经过几次努力,我还发现对于手动分配 id 的每个新对象,使用insert而不是save很重要(参见 3.1 的官方GRAILS_Mongo Doc),如下所示:

Cover c = new Cover()
c.id = "custom_id"
c.name = "new name"
c.insert()

当然,分配的所有 id 都必须完全不同。

于 2016-09-12T12:08:16.360 回答