- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试像在 Facebook 中那样进行“喜欢”切换。
当没有以前的“喜欢”时,我的代码工作正常。
并且当只有一个“喜欢”时也会删除查找。
但当有很多点赞时,它就开始成为问题。
因为我喜欢不同的帖子,
它添加了正确的引用
我又加了一个
这就是问题所在 - 我实际上按下了第三个的切换按钮,但结果不同。最上面的那个被删除了。
我使用 Mongoose Schemas 制作的模型如下:
var postSchema = new Schema({
title: {type:String},
content: {type:String},
likeId:[{type:Schema.ObjectId, ref:'Like'}],
user:{type:Schema.ObjectId},
commentId:[{type:Schema.ObjectId, ref:'Comment'}],
created:{type:Date, default:Date.now}
});
var likeSchema = new Schema({
user: Schema.ObjectId,
postId: {type:Schema.ObjectId, ref:'Post'},
created:{type:Date, default:Date.now}
});
没有中间件。
这是我的应用程序的 Controller 部分:
exports.postLikes = function(req,res){
var like = new Like({
postId: req.params.postId,
user: req.user._id
});
Like.find()
// find like "to the post" and "by the user"
.and([
{user:req.user._id},
{postId:req.params.postId}
])
//and then execute the following
.exec(function(err, result){
//if it exists, return "result"
if(result.length > 0){
//remove the result by result.id
Like.findOneAndRemove(result[0]._id, function(err){
//pull off the reference from likeId array in Post
Post.findOneAndUpdate({'_id':req.params.postId}, {$pull:{'likeId':result[0]._id}}, function(err){
if(err){res.send(err);}
res.json({status:'deleted'});
});
});
}
else{
like.save(function(err){
if(err){res.send(err);}
Post.findById(req.params.postId, function(err,post){
if(err) return res.send(err);
post.likeId.push(like);
post.save(function(err){
if(err) return res.send(err);
res.json({status:'done'});
});
});
});
};
});
};
请原谅我乱七八糟的代码。
我已经连续两天尝试让它正常工作,但找不到方法。帮帮我:(
我使用的数据是:
“喜欢”JSON 对象数组
(点赞数据已经删除,所以我重新做了)
/* 0 */
{
"_id" : ObjectId("5560de9f9c93fb28161a7375"),
"postId" : ObjectId("5560d511cae220180c37f9d3"),
"user" : ObjectId("5560daf3a09140800bb70a41"),
"created" : ISODate("2015-05-23T20:10:07.002Z"),
"__v" : 0
}
/* 1 */
{
"_id" : ObjectId("5560e7c98d6e3fbc15999daa"),
"postId" : ObjectId("5560d514cae220180c37f9d4"),
"user" : ObjectId("5560daf3a09140800bb70a41"),
"created" : ISODate("2015-05-23T20:49:13.867Z"),
"__v" : 0
}
/* 2 */
{
"_id" : ObjectId("5560e7d78d6e3fbc15999dab"),
"postId" : ObjectId("5560d515cae220180c37f9d5"),
"user" : ObjectId("5560daf3a09140800bb70a41"),
"created" : ISODate("2015-05-23T20:49:27.65Z"),
"__v" : 0
}
“POST”JSON 对象数组
/* 0 */
{
"_id" : ObjectId("5560d511cae220180c37f9d3"),
"title" : "titleteset",
"content" : "contentetest",
"user" : ObjectId("555d71825b6be608081553f1"),
"created" : ISODate("2015-05-23T19:29:21.732Z"),
"commentId" : [],
"likeId" : [ObjectId("5560d542cae220180c37f9dd"), ObjectId("5560d7799dbb4fe8114fa90c"), ObjectId("5560d8c1194d94f80aa4f230"), ObjectId("5560dba8a09140800bb70a47")],
"__v" : 19
}
/* 1 */
{
"_id" : ObjectId("5560d514cae220180c37f9d4"),
"title" : "titleteset",
"content" : "contentetest",
"user" : ObjectId("555d71825b6be608081553f1"),
"created" : ISODate("2015-05-23T19:29:24.027Z"),
"commentId" : [],
"likeId" : [ObjectId("5560d554cae220180c37f9de"), ObjectId("5560de899c93fb28161a7374"), ObjectId("5560e7c98d6e3fbc15999daa")],
"__v" : 4
}
/* 2 */
{
"_id" : ObjectId("5560d515cae220180c37f9d5"),
"title" : "titleteset",
"content" : "contentetest",
"user" : ObjectId("555d71825b6be608081553f1"),
"created" : ISODate("2015-05-23T19:29:25.761Z"),
"commentId" : [],
"likeId" : [ObjectId("5560db7ea09140800bb70a46"), ObjectId("5560e7d78d6e3fbc15999dab")],
"__v" : 4
}
添加:
我按照@Andrew Layers 的建议重构了我的代码,
我发现:
{ _id: 5560ef48a082c31c0a29062f,
postId: 5560d511cae220180c37f9d3,
user: 5560daf3a09140800bb70a41,
__v: 0,
created: Sun May 24 2015 06:21:12 GMT+0900 (Korea Standard Time) }
POST /api/posts/5560d511cae220180c37f9d3/likes 200 26.621 ms - 179
{ _id: 5560ef48a082c31c0a29062f,
postId: 5560d511cae220180c37f9d3,
user: 5560daf3a09140800bb70a41,
__v: 0,
created: Sun May 24 2015 06:21:12 GMT+0900 (Korea Standard Time) }
POST /api/posts/5560d511cae220180c37f9d3/likes 200 14.333 ms - 179
{ _id: 5560ef48a082c31c0a29062f,
postId: 5560d511cae220180c37f9d3,
user: 5560daf3a09140800bb70a41,
__v: 0,
created: Sun May 24 2015 06:21:12 GMT+0900 (Korea Standard Time) }
POST /api/posts/5560d511cae220180c37f9d3/likes 200 20.195 ms - 179
我得到了完全相同的结果变量,但 findOneAndRemove 删除了结果变量未指定的其他项目。
问题好像出在removing和pull off reference的逻辑上,目前还不知道是什么原因。
最佳答案
我在查询 findOneAndRemove 并仅输入 id 时发现了问题。 捂脸
使用 findByIdAndRemove 简单地解决了这个问题。
所以我现在的固定代码是:
exports.postLikes = function(req,res){
var like = new Like({
postId: req.params.postId,
user: req.user._id
});
Like.findOne({
user:req.user._id,
postId:req.params.postId
}).exec(function(err, result){
//if it exists, return "result"
if(result) {
console.log(result);
//remove the result by result.id
Like.findByIdAndRemove(result._id, function(err){
//pull off the reference from likeId array in Post
Post.findByIdAndUpdate(req.params.postId, {$pull:{'likeId':result._id}}, function(err){
if(err){res.send(err);}
res.json({status:'deleted', result:result});
});
});
}
else{
console.log(result);
like.save(function(err){
if(err){res.send(err);}
Post.findById(req.params.postId, function(err,post){
if(err) return res.send(err);
post.likeId.push(like);
post.save(function(err, foo){
if(err) return res.send(err);
res.json({status:'done', result:foo});
});
});
});
};
});
};
它工作得很漂亮,现在我可以 sleep 了,感谢大家对我的帮助,特别是 @Andrew Lavers,他提出了更好的代码。
关于javascript - findOneAndRemove 和 findOneAndUpdate 未按预期工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30417389/
我在 mongoose 的 findOneAndUpdate 中遇到问题。情况是我正在通过查找来更新文档。查询如下: UserModel.findOneAndUpdate({ individualId
以下是我的 mongo 数据库条目。 my-mongo-set:PRIMARY> db.stat_collection.find({name : /s/}) { "_id" : ObjectId("5
我正在尝试更新 mongodb 集合中的文档,但它对我不起作用。这是所有字段都到达后端的函数。我使用mlab在线mongo db router.post( '/accept', (req,re
我有一个应用程序,其中有一个教师数据库,其中包含一系列类(class) ID。创建新类(class)时,我尝试查找讲师的数据库条目并使用新类(class)的 ID 更新 classID 的数组。但是,
我正在尝试使用 findOneAndUpdate 更新存储在 mongoose 服务器中的文档之一。我将其设置为 PUT 请求,这就是我定义它的方式。 public updateConfigWithT
这个问题已经有答案了: findAndModify or findOneAndUpdate - "is not a function" (2 个回答) 已关闭 5 年前。 我花了整个早上的时间在谷歌上
我正在尝试使用 findOneAndUpdate 更新存储在 mongoose 服务器中的文档之一。我将其设置为 PUT 请求,这就是我定义它的方式。 public updateConfigWithT
该方法返回未定义。例如,在 findOneAndUpdate 解析之前完成。 exports.updateMovie = async (movie) => { try { re
尝试使用 findOneAndUpdate() 更改 MongoDB 中数组内的对象。我不清楚 mongoDB 的 nodeJS 驱动程序的文档。该文件看起来像这样: { _id:ObjectID
Tag schema结构如下: _id: "abcsd12312", nsp: "localhost.com", tags: [ 0: { tag: "#feedback",
我正在使用 Node、Express 和 Mongoose 开发 REST API。当我更新基本模型时,一切正常。但是当我在这种情况下尝试更新鉴别器对象 sportEvent 时,它不起作用。 Eve
我有一个 post 路由,它接收来自 express 应用程序中的 PUT 请求的数据,该应用程序旨在根据提交的表单输入更新 mongoose 文档。 “基本”模型是 Profile,我有两个 dis
我正在使用 mongodb 在某个集合中插入和更新一些文档。当我更新文档时,我只想获取修改后的字段。我可以通过使用 returnOriginal 选项进行更新来获取完整的新文档(包括修改后的字段),但
我正面临一个问题。我有一个名为 Car 的模型它具有以下结构。 { _id: '6179bd464c68a217e895703c', salesInfo: { salesDate: [
每当我进行更新 api 调用时,我只需要更新 serviceActiveFlag 状态。更新 api 调用后,我可以看到创建了一个包含空车辆数组的新文档,如下所示。 _id:59c76073c11d3
如果 componentId 和 wfInstanceId id 匹配,我需要更新“fields”数组中的类型、键和值。 这是我需要这样做的文档。 { "_id": { "$o
这个问题已经有答案了: mongodb: upserting: only set value if document is being inserted (4 个回答) 已关闭 5 年前。 我正在使用
我很想知道是否有更好的方法来更新字段值。我使用的字段值有时会存在,有时不会,具体取决于用户创建的帖子类型: 这是我的代码,用于列出要添加到数据库的字段 switch (req.body.postTyp
我有一个 Mongoose 模式,它有一个属性,它是 ObjectId 的数组。子文档。 如果需要删除/删除其中一个子文档,我当然想将其从父文档的数组属性中删除。 我的问题是:我以什么顺序执行子级的删
我目前正在与 Mongoose 一起工作,我遇到了一些我觉得很奇怪的事情。 我的代码如下: Challenge.findOneAndUpdate({ _id: req.params.cha
我是一名优秀的程序员,十分优秀!