为什么我的数据库中出现空数组?

时间:2018-11-23 13:43:54

标签: mongodb mongoose

我有一个launchIds的ID数组。 我正在尝试将其推入模型字段trips $addToSet: { trips: { $each: launchIds }。这给我一个错误:Cast to [ObjectId] failed for value \"[\"1\",\"2\",\"3\"]\...

如果我尝试通过launchIds映射并转换为Mongoose.Shema.Types.ObjectId,则进入数据库trips: [null,null,null]

lauchIds = ['1','2','3']

  async bookTrips({ launchIds }) {
    let userId = "5bf7f7b3817119363da48403";

    const mongoIds = launchIds.map(l => Mongoose.Schema.Types.ObjectId(l));

    return this.store.User.findByIdAndUpdate(
      { _id: userId },
      {
        $addToSet: { trips: { $each: mongoIds } }
      },
      { new: true }
    );
  }

这是我的模型架构:

  const UserSchema = new Mongoose.Schema(
    {
      email: {
        type: String,
        required: true
      },
      token: String,
      trips: [
        {
          type: Mongoose.Schema.Types.ObjectId,
          ref: "trip"
        }
      ]
    },
    { timestamps: true }
  );

我正在通过grapql游乐场传递ID。这是我的mutation

bookTrips: async (_, { launchIds }, { dataSources }) => {
  console.log(launchIds);
  // logs ['1','2','3']
  console.log(typeof launchIds);
  //Object 

  const results = await dataSources.userAPI.bookTrips({ launchIds });
  console.log(results);

  return { message: "hello" };
}

2 个答案:

答案 0 :(得分:0)

要将字符串或数字转换为mongo对象,请使用Mongoose.Types.ObjectId

const mongoIds = launchIds.map(l => Mongoose.Types.ObjectId(l));

答案 1 :(得分:0)

我找回了一个应该是数字的字符串数组

解决方案:

我的模型(与上面相同):

  const UserSchema = new Mongoose.Schema(
    {
      email: {
        type: String,
        required: true
      },
      token: String,
      trips: [
        {
          type: Mongoose.Schema.Types.ObjectId,
          ref: "trip"
        }
      ]
    },
    { timestamps: true }
  );

原始API:

  async bookTrips({ launchIds }) {
    let userId = "5bf7f7b3817119363da48403";

    const idsToNums = launchIds.map(Number);
    const mongoIds = idsToNums.map(l => Mongoose.Types.ObjectId(l));

    return this.store.User.findByIdAndUpdate(
      { _id: userId },
      {
        $push: { trips: { $each: mongoIds } }
      },
      { new: true }
    );
  }

请注意模型上的Mongoose.Schema.Types.ObjectId和api上的Mongoose.Types.ObjectId。如果我从模型中删除Schema或将Schema添加到a​​pi,则会收到错误消息。不知道为什么,但是上面的示例有效。我希望有人会对此有所帮助或提出更好的解决方案。