MongoDB find()找不到我需要的东西

时间:2016-10-31 14:49:01

标签: node.js mongodb

我正在尝试在集合中查找文档。我一直在几乎所有的集合中使用这个查询结构,但由于某种原因,这不适用于这个集合。有什么帮助吗?

此系列中唯一的数据 [ { _id: 581757143389e565b5cf8124, companyProfileID: '86660a5b-7f61-4238-889d-1cc3087947b9', url: 'sentsoftware.com', appID: 1 } ]

查询结构:

function getCompany(companyUrl, app, callback) {
	MongoClient.connect(url, function(err, db) {
		if (err) {
			console.log(err);
		} else {
			console.log("We are connected");
		}
		
		var collection = db.collection('Companies');
		collection.find({url: companyUrl, appID: app}).toArray(function (err, result) {
			if (err) {
				console.log(err);
				callback(err);
			} else if (result.length) {
				console.log("found");
				callback(result);
			} else {
				console.log("No document found");
				callback(err);
			}
		});
	});
}

我一直没有找到任何文件。但是,如果我要取出, appID: app部分,它会找到该文件。

1 个答案:

答案 0 :(得分:0)

Mongo查询是特定于类型的(尽管可以投射数字),您可能会得到一个字符串,您可以在其中找到一个数字。

如果你要求字符串“1”,

collection.find({appID: "1"})

如果你要求数字1,它只会返回字符串等于“1”的文档

collection.find({appID: 1})

它只会返回真实(Double,Long,Int)的文档。

您可以使用$ type查询检查您拥有的类型:

collection.find( { appID : { $type : "string" } } ); // or type 2 for earlier mongo versions
collection.find( { appID : { $type : "double" } } ); // or type 1 for earlier mongo versions
collection.find( { appID : { $type : "int" } } ); // or type 16 for earlier mongo versions

查看文档中的BSON类型和$ type,目前(2016/11/11):https://docs.mongodb.com/manual/reference/operator/query/type/#op._S_type

有趣的是,在双打,长征和Ints之间施放;所以插入这些:

db.collection("temp").insertOne({ "type" : "my double", "num" : new mongo.Double(1.0) });
db.collection("temp").insertOne({ "type" : "my long", "num" : new mongo.Long(1) });
db.collection("temp").insertOne({ "type" : "my int", "num" : 1 });

并搜索:

{ "num" : 1 }

返回三个文件。