Mongodb发现不与Objectid合作

时间:2014-12-29 20:37:36

标签: javascript node.js mongodb

这是我的代码,我的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"
}

感谢您查看并感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

您的网页主题是字符串,而您正在搜索的_ids是ObjectIds。您的查找与任何结果都不匹配,因为结果表中没有文档具有“webpageid”元素的ObjectId值。

我认为有两种解决方案。

  1. 您可以为webpageid集合中的results元素存储ObjectIds而不是字符串。实现这一点当然是基于这些文档如何进入集合。
  2. 您可以从循环中返回的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)
        ...
    
  3. 如果您使用第二个选项,您可能需要查看为webpageid集合中第二个文档的results值的开头有一个引号的原因。

    "webpageid" : "\"54960a916ecb16dc3c4880e8"
    

    最后,我对您的要求知之甚少,但您可能想重新考虑MongoDB作为解决方案。看起来你正在创建类似于JOIN的东西,这是MongoDB不能很好地处理的东西。