2012-04-20 128 views
1

我通常通过创建唯一的“代码”来操作对象。 (所以我创建一个代码为“测试”的对象,并使用objects.find({ code: "test" })取回对象,但我觉得这很奇怪,反效果。并获取其保存的对象或只是它的ObjectId回来一次保存如何获取保存的对象/新创建的对象

这将是很好,如果我们能做到这一点: objects.save({名称:“测试对象”});

并获得{ ObjectId: "47cc67093475061e3d95369d", name: "Test Object" }吗?返回

有没有办法做到这一点?

谢谢!

+0

您使用的是什么编程语言/ API? – Thilo 2012-04-20 02:08:40

+0

@Thilo:我正在使用Javascript的MongoDB驱动程序。 – TomShreds 2012-04-20 02:12:26

+0

相关:http://stackoverflow.com/questions/7860773/concurrency-getting-the-mongodb-generated-id-of-an-object-inserted-via-java-in – Thilo 2012-04-20 02:17:10

回答

1

这是你在找什么?

> var record = {hello:"goodbye"}; 
> db.test.save(record); 
> record; 
{ "hello" : "goodbye", "_id" : ObjectId("4f90c9106aee6e21b4e55c65") } 
+0

什么?!这真是太棒了,所以一旦一个对象被保存了,它就会得到它自己的ObjectId?!太好了! – TomShreds 2012-04-20 03:22:07

+0

的确,令人惊叹。 ;) – 2012-04-20 03:42:40

1

我不认为有一个API来从数据库中获取自动生成的ID后面,也没有真正的需要:

如果你的“代码”实在是独特的,你可以使用它作为对象ID。

objects.save({ _id: "test" }); 

_id字段不必是ObjectId类型,它只是必须是唯一的。如果您已经有一些主键类型数据,则不必使用自动生成的ID。这样,你也可以保存一个索引。

如果你想使用产生的ObjectId,自己生成它,你打电话之前保存:

ObjectId id = new ObjectId(); 
objects.save({ _id: id, something: 12345 }); 
+0

我想要的是停止使用“代码“并简单地操作ObjectID。问题的主要观点是:是否有可能从保存呼叫中取回对象?谢谢! – TomShreds 2012-04-20 02:11:58

+0

答案的第二部分帮助我找回了一个对象,谢谢! – TomShreds 2012-04-20 02:25:09