我正在尝试将一个文档链接到另一个文档。为此,我试图将一个文档的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"}
它们看起来不一样吗?链接文档的首选方式是什么?
编辑为什么这个问题会被低估?
答案 0 :(得分:1)
这两个结果是相同的,区别在于您如何选择结果来填充链接字段。
当您使用find
的第二个参数返回字段时,即使它只是一个,它将始终返回一个对象,其中字段名称为键,字段值为值。您使链接字段与该对象相同,因此您不仅仅将ID作为链接字段的值返回。因此,您的第一个查询的结果是:
{
_id {"$oid": "502186421fe3321dfa000001"}
}
你让场地相等。
或者你在第二个查询中选择car['_id']
,因为链接字段的值只是id。
这是解释它应如何返回值的驱动程序和语言差异。
我想说第二种方法是最好的方法,因为第一种方法是以额外对象的形式将不可靠的膨胀添加到字段中。