Редактировать: я обнаружил, что решением проблемы была установка параметра коллекции.В mongoDB crypto_debug не фигурирует во множественном числе.Очень большая головная боль.
Существует разница в автоматическом именовании коллекций между PyMongo и Mongoose:
ex:
inserting to db using mongoose:
bandcampDebugModel = db2.model('bandcamp_debug', bandcampDebugSchema);
becomes 'bandcamp_debugs'
inserting to db using PyMongo:
db2 = client['cryptoDebug']
debug = db2.crypto_debug
remains 'crypto_debug'
The solution was to add the explicit collection name:
const cryptoDebugModel = crypto_debug.model("crypto_debug",
{
name : String,
dateOfIssue: String,
error: String
}, "crypto_debug");
У меня проблема с запросом graphQLвозвращает пустой массив, и запрос отлично работает в MongoDB.
В этом приложении запущено 5 скриптов скребка.2 сделаны на Python и 3 сделаны на Javascript.
Всего в MongoDB есть 11 коллекций, которые запрашиваются с помощью GraphQL.9 из 11 работают без проблем.
Обе рассматриваемые коллекции находятся в сценариях Python, использующих pymongo.Я опубликую код для одного из двух, поскольку оба они похожи по структуре.
Я действительно ударил стену в этот момент и перепробовал все, что я могу придумать, и не уверен, где отладку найтиисточник этой проблемы.
То, что я пробовал:
- typeof для полей в mongodb строковые, там все выглядит нормально
- различные формы cryptoDebugModel.запрос find () в конечной точке graphQL
- удаление даты, dateOfIssue в скрипте python, чтобы увидеть, есть ли проблема в pymongo / string (но если она отображается как строка в mongoDB, то это не должно быть проблемой?)
- переименование db / collection для учета возможного множественного сценария
Как я уже сказал, 9 из 11 работают без проблем, и все идеи с низко висящими фруктами имеютбыли исчерпаны, такие как опечатки, повторяющиеся имена и т. д.
Запрос выглядит нормально в консоли mongoDB, но возвращает пустой массив в запросе graphQL, поэтому любая помощь будеточень признателен.
Я могу предоставить полный код, если требуется, стараясь сделать проблему максимально краткой.
Это изображение запроса mongoDB crypto_debug.
Это изображение typeof для запроса mongoDB crypto_debug.
Это изображение графика graphQL для crypto_debug.
import pymongo
client = MongoClient()
db = client['crypto'] # prices.update_one and prices.insert_one work fine here
prices = db.crypto_data_prices
db2 = client['cryptoDebug']
debug = db2.crypto_debug
...
try:
...
except:
e = str( sys.exc_info()[0] )
name = str( 'Cryptocurrency' )
dateOfIssue = str( "{:%B %d, %Y}".format(datetime.now()) )
error = str( 'Error with updating database: %s' % e )
debug.insert_one(
{
'name' : name,
'dateOfIssue' : dateOfIssue,
'error' : error
}
)
const mongoose = require("mongoose");
const crypto_debug = mongoose.createConnection('mongodb://localhost/cryptoDebug', {useNewUrlParser: true});
const topSearches_debug = mongoose.createConnection('mongodb://localhost/googleSearchesDebug', {useNewUrlParser: true});
Promise.all([bandcamp, crypto, newMovies, newOnSteam, topSearches, upcomingSneakers,
bandcamp_debug, crypto_debug, newMovies_debug, topSearches_debug, upcomingSneakers_debug]).then(() => {
// model and type for crypto debug data
//----------------------------------------------------------------
const cryptoDebugModel = crypto_debug.model("crypto_debug",
{
name : String,
dateOfIssue: String,
error: String
});
const cryptoDebugType = new GraphQLObjectType({
name: "crypto_debug_records",
fields: {
name: { type: GraphQLString },
dateOfIssue: { type: GraphQLString },
error: { type: GraphQLString }
}
});
// model and type for top searches debug data
//----------------------------------------------------------------
const topSearchesDebugModel = topSearches_debug.model("top_searches_debug",
{
name: String,
dateOfIssue: String,
error: String
});
const topSearchesDebugType = new GraphQLObjectType({
name: "top_searches_debug_records",
fields: {
name: { type: GraphQLString },
dateOfIssue: { type: GraphQLString },
error: { type: GraphQLString }
}
});
//.......
const schema = new GraphQLSchema({
query: new GraphQLObjectType({
name: "Query",
fields: {
//...
crypto_debug: {
type: GraphQLList(cryptoDebugType),
resolve: (root, args, context, info) => {
return cryptoDebugModel.find().sort({_id : -1}).exec();
}
},
top_searches_debug: {
type: GraphQLList(topSearchesDebugType),
resolve: (root, args, context, info) => {
return topSearchesDebugModel.find().sort({_id : -1}).exec();
}
},
//.........