MongoDB-我可以使用ObjectId作为密钥吗?

MongoDB-我可以使用ObjectId作为密钥吗?,mongodb,Mongodb,我有一个商店列表,需要添加注释。这些注释需要有一个ID,以便可以编辑和删除——这适用于ID参数将包含用于标识对象的字符串的web应用程序。我对MongoDB不太熟悉,但认为将这些注释放在地图中,以ObjectId为键,将是一个简单的解决方案。如果在MongoDB中有更好的方法,请纠正我 无论如何,当我尝试使用(new ObjectId())作为键时,shell中出现了一个“invalid property id”错误 db.locations.update({_id: 'store1'}, {$

我有一个商店列表,需要添加注释。这些注释需要有一个ID,以便可以编辑和删除——这适用于ID参数将包含用于标识对象的字符串的web应用程序。我对MongoDB不太熟悉,但认为将这些注释放在地图中,以ObjectId为键,将是一个简单的解决方案。如果在MongoDB中有更好的方法,请纠正我

无论如何,当我尝试使用(new ObjectId())作为键时,shell中出现了一个“invalid property id”错误

db.locations.update({_id: 'store1'}, {$set: {'notes': {(new ObjectId()): 'note1'}}})

你知道我做错了什么吗?

试着用这样的方法

db.locations.update({_id: 'store1'}, {$set: {'notes': { _id :  ObjectId("47cc67093475061e3d95369d")}}})

查看更多详细信息

在MongoDB中,键始终是字符串。要设置嵌套字段,必须将字符串连在一起

db.locations.update({u id:'store1'},{$set:{'notes'.+(new ObjectId()).toString():'note1'})

对我来说,似乎你应该有一个文档,其中_id是你的笔记。“store1”的当前ID应该是此文档的属性。换句话说,您需要在这里调整您的模式。这样,您就不需要将对象ID附加到注释中。这也有助于以后更快地查询此文档。

谢谢您的回复,galimy。上面提供的代码段使用ObjectId作为值而不是键。我想使用ObjectId作为键以便于引用。可能是,如果您将“_id”用作简单字符串并为此属性创建索引会更好。斯科特,这在1.6中似乎不适用于我。这就好像它不会计算键所在的表达式。你关于键总是字符串的评论就是我想要的答案。你可能需要使用不同的结构。这只是一个概念性的例子。