这是我的代码,我的doc值为null。但是在findOne({'webpageid':docs [i] ._ id}而不是docs [i] ._ id中,如果我传递了网页,那么它就可以了。而且我验证了docs有所需的网页数据
// get all the records from the webpages table
var collection = db.get('webpages');
collection.find({}, function(e,docs){
// iterate over the webpage list
for (var i = 0; i < docs.length; i++) {
// check if results table has any record for this webpage
db.get('results').findOne({'webpageid':docs[i]._id}, function(err, doc)
{
if(err)
{
return;
}
console.log(doc);
});
};
});
以下是“网页”表格中的内容
{
"_id" : ObjectId("549608e16ecb16dc3c4880e6"),
"name" : null,
"url" : "http://www.google.com",
"texttoverify" : null,
"interval" : null,
"websiteid" : null
}
{
"_id" : ObjectId("549609986ecb16dc3c4880e7"),
"name" : null,
"url" : "http://www.google.com",
"texttoverify" : null,
"interval" : null,
"websiteid" : null
}
{
"_id" : ObjectId("54960a916ecb16dc3c4880e8"),
"name" : "xyz",
"url" : "http://www.google.com",
"texttoverify" : "hello",
"interval" : "00:15:00.0000000",
"websiteid" : "02D7BE81-4E01-4347-BAE5-BA9A2D7EE11E"
}
以下是“结果”表格中的内容
{
"_id" : ObjectId("54985a1e69af082f9c477574"),
"webpageid" : "549608e16ecb16dc3c4880e6"
}
{ "_id" : ObjectId("54986f4e69af082f9c477575"), "name" : "name" }
{
"_id" : ObjectId("5498d10c69af082f9c477576"),
"name" : "name",
"webpageid" : "\"54960a916ecb16dc3c4880e8"
}
{
"_id" : ObjectId("5498d1f969af082f9c477577"),
"name" : "name",
"webpageid" : "54960a916ecb16dc3c4880e8"
}
感谢您查看并感谢您的帮助。
答案 0 :(得分:1)
您的网页主题是字符串,而您正在搜索的_ids是ObjectIds。您的查找与任何结果都不匹配,因为结果表中没有文档具有“webpageid”元素的ObjectId值。
我认为有两种解决方案。
webpageid
集合中的results
元素存储ObjectIds而不是字符串。实现这一点当然是基于这些文档如何进入集合。您可以从循环中返回的ObjectId创建一个字符串变量来进行比较。例如,
...
for(var i = 0; i < docs.length; i++) {
var docId = docs[i]._id.toString(); // create a string
db.get('results').findOne({'webpageid':docId}, function(err, doc)
...
如果您使用第二个选项,您可能需要查看为webpageid
集合中第二个文档的results
值的开头有一个引号的原因。
"webpageid" : "\"54960a916ecb16dc3c4880e8"
最后,我对您的要求知之甚少,但您可能想重新考虑MongoDB作为解决方案。看起来你正在创建类似于JOIN的东西,这是MongoDB不能很好地处理的东西。