【发布时间】:2019-04-26 03:13:48
【问题描述】:
我有一个 ID 数组,即 launchIds。
我正在尝试将其推送到模型字段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" };
}
【问题讨论】:
-
看起来 launchIds 是某种转义字符串。您能告诉我们您实际设置该变量的位置吗? (即你怎么打电话给
booktrips? -
更新了帖子。这更有意义吗?
-
我们能看到控制台,还有
console.log(typeof launchIds);? -
嗯...它是一个对象