javascript - Mongodb find 不适用于 Objectid

标签 javascript node.js mongodb

这是我的代码,我得到的文档为空值。但是在 findOne({'webpageid':docs[i]._id} 而不是 docs[i]._id 中,如果我传递了网页id,它就可以工作。并且我验证了文档具有所需的网页数据

// 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"
}

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

最佳答案

您的webpageid 是字符串,而您搜索时使用的_ids 是ObjectId。您的查找结果与任何结果都不匹配,因为结果表中没有包含“webpageid”元素的 ObjectId 值的文档。

我认为有两种解决方案。

  1. 您可以在 results 集合中存储 webpageid 元素的 ObjectId,而不是字符串。当然,其实现取决于这些文档如何进入集合。
  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)
        ...
    

如果您选择第二个选项,您可能需要了解为什么结果中第二个文档的webpageid值的开头有一个前导引号> 收藏。

"webpageid" : "\"54960a916ecb16dc3c4880e8"

最后,我不太了解您的需求,但您可能想重新考虑 MongoDB 作为解决方案。看来您正在创建类似 JOIN 的东西,而 MongoDB 的设计并不能很好地处理这种情况。

关于javascript - Mongodb find 不适用于 Objectid,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27695652/

相关文章:

javascript - 当我在 Spree 商店中添加 Braintree Drop-in UI 时,付款方式选择出现问题

node.js - 我应该如何在 node.js 中保留用于 socket.io 交互的临时数据?

angularjs - Passport 在调用 passport.authenticate ('facebook' 后,如何在不重定向用户的情况下获取 facebook 重定向 uri

javascript - $lookup 搜索 Mongodb

javascript - 从 mongodb nodejs 延迟返回集合数组

mongodb - 如何在 Mongoose 中使用 "save"函数更新子文档?

javascript - 在 JavaScript 中将元素作为第一个参数传递给事件处理程序的最简单方法是什么?

javascript - 使用 javascript 获取 gridview 文本框值的总和并在标签中显示总计

javascript - 嵌套setInterval问题

node.js - Sails 应用最佳实践