Как я могу добавить ObjectID в массив через Pymon go? - PullRequest
1 голос
/ 25 апреля 2020

Я конвертирую базу данных SQLite в базу данных MongoDB, используя pymon go. Кажется, я не могу обновить связанные поля с помощью ObjectIds.

В javascript моя схема статей выглядит следующим образом:

const ArticleSchema = new mongoose.Schema({
  title: {
    type: String,
    required: true,
  },
  body: {
    type: String,
    required: true,
  },
  category: {
    type: Schema.Types.ObjectId,
    ref: "Category",
    required: true,
  },
});

И модель категорий:

const CategorySchema = new mongoose.Schema({
  name: {
    type: String,
    required: true,
  },
  weigth: {
    type: Number,
    required: true,
  },
  articles: [
    {
      type: Schema.Types.ObjectId,
      ref: "Article",
    },
  ],
});

Данные находятся в базе данных, и я просто извлекаю их и перебираю все строки с помощью запроса двойного соединения, поэтому я также получаю категорию. Моя проблема заключается в попытке добавить идентификатор статьи в массив Articles в python или эквивалент javascript pu sh. Код, который я пробую, следующий:

for row in rows:
    # get the category
    cat = categories.find_one({'name': row[4]})

    cat_id = str(cat['_id'])
    # populate the article
    article = {
        'title': row[0],
        'body': row[1],
        'category': str(cat["_id"])
    }

    id = articles.insert_one(article).inserted_id

    categories.update({
        '_id': cat_id
    },
        {
        '$push': {'articles': id}}
    )

1 Ответ

2 голосов
/ 25 апреля 2020

Ваш запрос на обновление никогда не совпадает с _id категории.

Если вы замените cat_id = str(cat['_id']) на cat_id = cat['_id']

, это должно сработать. потому что ваш categories.update({'_id': cat_id}) не соответствует идентификатору, так как вы запрашиваете не ObjectId, а string. Или другими словами ObjectId('5ea48b3743183ad74f6987bc') != '5ea48b3743183ad74f6987bc'

...