为什么我会为类似的查询获得2个不同的结果?

时间:2012-08-14 10:34:40

标签: python mongodb pymongo

我正在尝试将一个文档链接到另一个文档。为此,我试图将一个文档的ObjectID存储在另一个文档中。我正在尝试几种不同的方法来产生相同的结果,但它们实际上看起来不同。以下是我正在尝试的方法:

方法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 个答案:

答案 0 :(得分:1)

这两个结果是相同的,区别在于您如何选择结果来填充链接字段。

当您使用find的第二个参数返回字段时,即使它只是一个,它将始终返回一个对象,其中字段名称为键,字段值为值。您使链接字段与该对象相同,因此您不仅仅将ID作为链接字段的值返回。因此,您的第一个查询的结果是:

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

你让场地相等。

或者你在第二个查询中选择car['_id'],因为链接字段的值只是id。

这是解释它应如何返回值的驱动程序和语言差异。

我想说第二种方法是最好的方法,因为第一种方法是以额外对象的形式将不可靠的膨胀添加到字段中。