нужно добавить код из пользовательского ввода, но не уверен, как

Мы можем объединить / объединить все данные внутри одной коллекции с простой функцией в нескольких строках с помощью клиентской консоли mongodb, и теперь мы сможем выполнить требуемый запрос. Ниже полный пример:

.- Авторы:

db.authors.insert([
    {
        _id: 'a1',
        name: { first: 'orlando', last: 'becerra' },
        age: 27
    },
    {
        _id: 'a2',
        name: { first: 'mayra', last: 'sanchez' },
        age: 21
    }
]);

.- Категории:

db.categories.insert([
    {
        _id: 'c1',
        name: 'sci-fi'
    },
    {
        _id: 'c2',
        name: 'romance'
    }
]);

.- Книги

db.books.insert([
    {
        _id: 'b1',
        name: 'Groovy Book',
        category: 'c1',
        authors: ['a1']
    },
    {
        _id: 'b2',
        name: 'Java Book',
        category: 'c2',
        authors: ['a1','a2']
    },
]);

.- Книжное кредитование

db.lendings.insert([
    {
        _id: 'l1',
        book: 'b1',
        date: new Date('01/01/11'),
        lendingBy: 'jose'
    },
    {
        _id: 'l2',
        book: 'b1',
        date: new Date('02/02/12'),
        lendingBy: 'maria'
    }
]);

.- Магия:

db.books.find().forEach(
    function (newBook) {
        newBook.category = db.categories.findOne( { "_id": newBook.category } );
        newBook.lendings = db.lendings.find( { "book": newBook._id  } ).toArray();
        newBook.authors = db.authors.find( { "_id": { $in: newBook.authors }  } ).toArray();
        db.booksReloaded.insert(newBook);
    }
);

.- Получить новые данные коллекции:

db.booksReloaded.find().pretty()

.- Ответ:)

{
    "_id" : "b1",
    "name" : "Groovy Book",
    "category" : {
        "_id" : "c1",
        "name" : "sci-fi"
    },
    "authors" : [
        {
            "_id" : "a1",
            "name" : {
                "first" : "orlando",
                "last" : "becerra"
            },
            "age" : 27
        }
    ],
    "lendings" : [
        {
            "_id" : "l1",
            "book" : "b1",
            "date" : ISODate("2011-01-01T00:00:00Z"),
            "lendingBy" : "jose"
        },
        {
            "_id" : "l2",
            "book" : "b1",
            "date" : ISODate("2012-02-02T00:00:00Z"),
            "lendingBy" : "maria"
        }
    ]
}
{
    "_id" : "b2",
    "name" : "Java Book",
    "category" : {
        "_id" : "c2",
        "name" : "romance"
    },
    "authors" : [
        {
            "_id" : "a1",
            "name" : {
                "first" : "orlando",
                "last" : "becerra"
            },
            "age" : 27
        },
        {
            "_id" : "a2",
            "name" : {
                "first" : "mayra",
                "last" : "sanchez"
            },
            "age" : 21
        }
    ],
    "lendings" : [ ]
}

Надеюсь, эти строки помогут вам.

0
задан Pikachu the Watermelon Wizard 17 March 2019 в 23:29
поделиться

1 ответ

Я не уверен, как вы собираетесь его развернуть, но даже с точки зрения кодирования в его нынешнем виде он не будет вести себя так, как вы ожидаете. Я предполагаю, что вы делаете это только для того, чтобы учиться. Итак, позвольте мне указать пару мест, где вы неправильно поняли основы, и чисто педагогический пример того, как это можно сделать. Имейте в виду, что я настоятельно не рекомендую использовать это в любом реальном контексте.

Вы определили функцию calcweeklywages дважды в своем коде. Когда на самом деле это должно быть определено только один раз. Если вы хотите использовать код, вы называете его так, как вы это делали в программе main(). Эта функция работает одинаково для обоих ваших работников, поэтому для получения разной еженедельной заработной платы вы должны получать разную заработную плату. Но как вы связываете их соответствующую заработную плату с их именами (или некоторым их представлением в вашем коде)?

Это хороший пример использования объектно-ориентированного программирования. Краткий и интересный праймер здесь здесь . Что касается кода, он будет выглядеть следующим образом:

class Employee:
    def __init__(self, Name, Wage = 0, Hours = 0):
        self.Name = Name
        self.Wage = Wage
        self.Hours = Hours

def calcweeklywages(Employee, totalhours):
    '''Return the total weekly wages for a worker working totalHours,
    with a given regular hourlyWage.  Include overtime for hours over 40.
    '''
    hourlywage = Employee.Wage
    if totalhours <= 40:
        totalwages = hourlywage * totalhours
    else:
        overtime = totalhours - 40
        totalwages = hourlywage * 40 + (1.5 * hourlywage) * overtime
    return totalwages

# In your main body, you just test the functionality
EmployeeList = []
EmployeeList.append(Employee("Anne", 34))
EmployeeList.append(Employee("Johnathan", 30))

while(True):
    action = input('Exit? (y/n): ')
    if(action == 'y'):
        break
    else:
        name = input('Enter the employee\'s name: ')
        for Employee in EmployeeList:
            if(Employee.Name == name):
                Person = Employee
        hours = int(input('Enter the number of hours worked: '))
        print('Wages for', hours, 'hours at', Person.Wage,'per hour is', calcweeklywages(Person, hours))

РЕДАКТИРОВАТЬ: я извиняюсь, я забыл об административной части. Но вот,

class Employee:
    def __init__(self, Name, Wage = 0, Hours = 0, Admin = False, code = ''):
        self.Name = Name
        self.Wage = Wage
        self.Hours = Hours
        self.Admin = Admin
        self.code = code

def calcweeklywages(Employee, totalhours):
    '''Return the total weekly wages for a worker working totalHours,
    with a given regular hourlyWage.  Include overtime for hours over 40.
    '''
    hourlywage = Employee.Wage
    if totalhours <= 40:
        totalwages = hourlywage * totalhours
    else:
        overtime = totalhours - 40
        totalwages = hourlywage * 40 + (1.5 * hourlywage) * overtime
    return totalwages

# In your main body, you just test the functionality
EmployeeList = []
EmployeeList.append(Employee("Anne", 34))
EmployeeList.append(Employee("Johnathan", 30))
EmployeeList.append(Employee("Mr. Admin", 50, 0, True, 'Open Sesame'))
while(True):
    action = int(input('Enter action :\n 1. Exit.\n 2. Add new employee.\n 3. Compute weekly wage\n'))
    if(action == 1):
        break
    elif(action == 2):
        AdminName = input('Enter operator name : ')
        Flag = False
        for EmployeeInst in EmployeeList:
            if((EmployeeInst.Name == AdminName) & (EmployeeInst.Admin)):
                code = input('Enter code :')
                if(code != EmployeeInst.code):
                    break
                NewName = input('New Employee name? :')
                NewWage = int(input('New employee wage? :'))
                EmployeeList.append(Employee(NewName, NewWage))
                Flag = True
        if(not Flag):
            print('Wrong Credentials')
            break
    elif(action == 3):
        name = input('Enter the employee\'s name: ')
        for Employee in EmployeeList:
            if(Employee.Name == name):
                Person = Employee
        hours = int(input('Enter the number of hours worked: '))
        print('Wages for', hours, 'hours at', Person.Wage,'per hour is', calcweeklywages(Person, hours))
    else:
        print('Input out of range')
        break

Но опять же, сеанс не является постоянным между различными запусками ядра. Здесь нет настоящей «безопасности», это всего лишь исследование объектно-ориентированного кода Python. Пожалуйста, не используйте это для каких-либо реальных приложений. Существует много всего, что связано со всем этим. Вы должны хранить его в защищенном файле, иметь некоторый интерфейс GUI и т. Д. И т. Д. Есть гораздо более умные пользователи, которые помогут вам внедрить систему в целом. Всего наилучшего в учебе. Приветствия.

0
ответ дан Balakrishnan Rajan 17 March 2019 в 23:29
поделиться
Другие вопросы по тегам:

Похожие вопросы: