0

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

方法一

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

在数据库中看起来像这样:

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

和方法二

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

看起来像这样:

{"$oid": "502186421fe3321dfa000001"}

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

编辑为什么这个问题被否决了?

4

1 回答 1

1

这两个结果是相同的,不同之处在于您如何挑选结果来填充链接字段。

当您使用的第二个参数find返回字段时,即使它只是一个参数,它也将始终返回一个以字段名称作为键、字段值作为值的对象。您使链接字段等于该对象,因此您不只是将 ID 作为链接字段的值返回。所以你的第一个查询的结果是:

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

你让这个领域等于那个。

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

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

我想说第二种方法是最好的方法,因为第一种方法以额外对象的形式向字段添加了不必要的膨胀。

于 2012-08-14T10:40:16.757 回答