2012-08-14 139 views
0

我试图将一个文档链接到另一个文档。为此,我试图在另一个文件中存储一个文档的ObjectID。我尝试了几种应该产生相同结果的不同方式,但实际上看起来不同。这里有我想要的方式:为什么我会针对类似查询得到2个不同的结果?

方法1

owner['ownedCar'] = db.cars.find_one({ '_id' : ObjectId($theCarsObjectIDstring) }, {'_id': 1}) 
db.owners.save(owner) 

看起来像这样在数据库:

{ 
_id {"$oid": "502186421fe3321dfa000001"} 
} 

和方法2

car = db.cars.find_one({ '_id' : ObjectId($theCarsObjectIDstring) }) 
owner['ownedCar'] = car['_id'] 
db.owners.save(owner) 

,它看起来像这个:

{"$oid": "502186421fe3321dfa000001"} 

它们看起来不一样吗?链接文档的首选方式是什么?

编辑为什么这个问题会得到低投票?

回答

1

这两个结果是一样的,区别在于你如何挑选结果来填充链接字段。

当您使用的find第二参数去回场,哪怕只是一个,它会永远与字段名称为键和字段值的值返回一个对象。您使链接的字段等于该对象,因此您不仅仅将该ID作为链接字段的值返回。所以你的第一个查询的结果是:

{ 
_id {"$oid": "502186421fe3321dfa000001"} 
} 

而你让这个领域相等。

另外,您在第二个查询中实际挑选出car['_id'],因此链接字段的值仅为id。

这是一个驱动程序和语言在解释它应该如何返回值的区别。

我想说的第二种方法是自第一种方法以来最好的方式添加unnessecary膨胀到额外的对象形式的领域。

相关问题