我正在尝试在集合中查找文档。我一直在几乎所有的集合中使用这个查询结构,但由于某种原因,这不适用于这个集合。有什么帮助吗?
此系列中唯一的数据
[ { _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
部分,它会找到该文件。
答案 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 }
返回三个文件。