假设我有一个包含2个集合的MongoDB实例 - 地方 和 人。
一个典型的 地方 文档看起来像:
{
"_id": "someID"
"name": "Broadway Center"
"url": "bc.example.net"
}
还有一个 人 文档看起来像:
{
"name": "Erin"
"place": DBRef("places", "someID")
"url": "bc.example.net/Erin"
}
有没有办法验证 地方 DBRef的 一切 文件在 人 采集?
有 没有官方/内置方法 测试DBRefs的有效性,因此必须手动执行验证。
我写了一个小脚本 - validateDBRefs.js:
var returnIdFunc = function(doc) { return doc._id; };
var allPlaceIds = db.places.find({}, {_id: 1} ).map(returnIdFunc);
var peopleWithInvalidRefs = db.people.find({"place.$id": {$nin: allPlaceIds}}).map(returnIdFunc);
print("Found the following documents with invalid DBRefs");
var length = peopleWithInvalidRefs.length;
for (var i = 0; i < length; i++) {
print(peopleWithInvalidRefs[i]);
}
运行时:
mongo DB_NAME validateDBRefs.js
将输出:
使用无效的DBRefs找到以下文档
513c4c25589446268f62f487
513c4c26589446268f62f48a
你可以为它添加一个存储的函数。请注意,mongo文档不鼓励使用存储的函数。你可以阅读它 这里
本质上,您创建一个函数:
db.system.js.save(
{
_id : "myAddFunction" ,
value : function (x, y){ return x + y; }
}
);
一旦创建了该函数,就可以在where子句中使用它。所以你可以编写一个函数来检查dbRef中是否存在id。