- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
这是我的 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 中添加一个额外的条目?!即使我的 console.log 只显示了一个。
注意:
我测试了后端路由是否被多次调用。它不是。
这似乎是 $push
的问题,因为如果我只有 { addedItems: newProduct._id }
那么只有一个条目进入,但它会覆盖整个数组。
编辑:
制作了一个测试项目以产生相同的结果:https://github.com/philliprognerud/test-mcve-stackoverflow
谁能弄清楚发生了什么?
最佳答案
问题是由于您混合使用了 Promise(通过 async/await)和带有 findOneAndUpdate
调用的回调,最终执行了两次命令。
解决问题:
const updatedUser = await User.findOneAndUpdate(
{ id: userID },
{ $push: { addedItems: newProduct.id } },
{ upsert: true, new: true }
);
console.log(updatedUser);
future 的读者请注意,问题中没有显示 await
的使用,而是在 MCVE 中。
关于node.js - Mongoose $push 不断添加两个条目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49372428/
如果这不是一个错误,那就是另一个错误。如果不是那样的话,那就是别的东西了。我觉得我的项目已经改变了很多,现在只是试图解决代码签名问题,结果一切都搞砸了。我严格按照说明进行操作,但出现错误,例如当前的“
我不确定是否有一些我不知道的内置变量或规则,或者 make 是否有问题,或者我只是疯了。 对于我的一个项目,我有一个如下的 makefile: CC=g++ CFLAGS=-O3 `libpng-co
我有大约 10 个 div,它们必须不断翻转,每个 div 延迟 3 秒 这个 codrops 链接的最后一个效果是我正在寻找的,但无需单击 div http://tympanus.net/Devel
我如何使用 jQuery 持续运行 PHP 脚本并每秒获取响应,以及将鼠标上的少量数据发送到同一脚本? 我真的必须添加一些随机扩展才能让这么简单的计时器工作吗? 最佳答案 To iterate is
JBoss 4.x EJB 3.0 我见过如下代码(大大简化): @Stateless @TransactionAttribute(TransactionAttributeType.NOT_SUPPO
使用 PHPStorm,我试图忽略每次尝试进行 git 提交时 pop 的 workspace.xml。 我的 .gitignore 看起来像: /.idea/ .idea/workspace.xml
我是一名优秀的程序员,十分优秀!