通过自动'_id'字段搜索MongoDB,这不可能吗?

时间:2011-02-22 09:00:45

标签: php mongodb

我正在尝试查询MongoDB并找到具有特定“_id”的行,但我不能这样做。当我写作例如:

$r = $cursor->getNext(); 

并调试,我发现$ r ['_ id']的值为空。不是空的,但是空的!知道为什么会这样,以及如何避免它?使用PHP

更新

我能够通过$cursor->key()检索'_id',但我仍无法查询,我想知道为什么背后的原因!

3 个答案:

答案 0 :(得分:1)

我敢打赌,原因是你没有使用MongoId类。

答案 1 :(得分:0)

我能够通过$cursor->key()检索'_id',但我仍无法查询,我想知道为什么背后的原因!

答案 2 :(得分:0)

您需要小心避免RDBMS思考。 ObjectID不是主键。请记住,MongoDB是一个解决“大数据”问题的答案。这意味着大量的数据,每天可能有成千上万的条目...你得到了图片。因此,ObjectID表示一个伪随机密钥,它允许快速插入数据,而不必找到相当于“最后插入ID”的RDBMS。

如果你真的热衷于使用_id作为RDBMS主键的等价物,只需在第一种情况下插入文档时覆盖它:

db.collection.insert({_id:100,name:"Joe",balance:200.18})

然后您可以轻松地找到以下文档:

db.collection.find({_id:100})

但是你可能会遇到可扩展性问题......然后你又回到了如何确定生成下一个关键字的问题。此外, _id 必须才是唯一的。如果您不小心添加了与现有文档具有相同 _id 的新文档,则在使用 insert()时会出现“重复键”错误。如果您使用 save()添加文档并且 _id 已经存在,您将最终覆盖现有文档中的数据!

以后会有更多想法......