MongoDB find() не найдет то, что мне нужно

Я пытаюсь найти документ в коллекции. Я использую эту структуру запросов почти во всех моих коллекциях, но по какой-то причине это не работает для этой коллекции. Есть помощь?

Единственные данные в этой коллекции прямо сейчас
[ { _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 ответ

  1. Запрос Mongo имеет определенный тип (хотя числа могут быть приведены), у вас, вероятно, есть строка, где вы ожидаете номер.

    Если вы попросите строку » 1″,

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

    он будет возвращать только документы со строкой, равной «1», Если вы попросите номер 1

    collection.find({appID: 1})
    

    он возвращает только документы с реальным номером (Double, Long, Int) in.

    Вы можете проверить, какие типы у вас есть с запросом $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 в docs, в настоящее время (2016/11/11): https://docs.mongodb.com/manual/reference/operator/query/type/#op._S_type

    Интересно, что он будет бросать между двойниками, лонгами и Интами; поэтому вставка этих:

    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 }
    

    возвращает три документа.