以下是我的user
和product
模式:
const productSchema = new Schema({
//...
addedBy: {
type: mongoose.Schema.Types.ObjectId,
ref: "users"
}
});
const userSchema = new Schema({
//...
addedItems: [{
type: mongoose.Schema.ObjectId,
ref: "products"
}]
});
mongoose.model("products", productSchema);
mongoose.model("users", userSchema);
在我的 node 后端路由中,我执行以下查询:
User.findOneAndUpdate(
{ _id: req.body.id },
{ $push: { addedItems: newProduct._id } },
{ upsert: true, new: true },
function(err, doc) {
console.log(err, doc);
}
);
console.log
号打印出:
{
//...
addedItems: [ 5ab0223118599214f4dd7803 ]
}
一切看起来都很好.我会使用mongo db的前端网站查看数据;我用的是mlab.com,这表明:
{
//...
"addedItems": [
{
"$oid": "5ab0223118599214f4dd7803"
},
{
"$oid": "5ab0223118599214f4dd7803"
}
]
}
到底发生了什么事?为什么要在addedItems中添加一个附加条目?!即使是我的控制台.日志(log)只显示了一个.
Note:
我测试了后端路由是否被多次调用.事实并非如此.
$push
似乎是个问题,因为如果我只有{ addedItems: newProduct._id }
,那么只有一个条目进入,但它会覆盖整个array.
Edit:
做了一个测试项目来产生同样的结果:https://github.com/philliprognerud/test-mcve-stackoverflow
有人知道发生了什么吗?