可以使用mongodb查询更新文档,但在mongoose中不可用
我的收藏是这样的: 通过此查询,我可以更新可以使用mongodb查询更新文档,但在mongoose中不可用,mongodb,express,mongoose,Mongodb,Express,Mongoose,我的收藏是这样的: 通过此查询,我可以更新回复。喜欢 db.getCollection("posts").updateOne( { "_id": ObjectId("5da832caeb173112348e509b"), //posts._id "comments.replies._id":ObjectId("5db6a88f7c6cfb0d0c2b689b"),//replies._id }, { "$push": { "comments.$[outer].repli
回复。喜欢
db.getCollection("posts").updateOne(
{
"_id": ObjectId("5da832caeb173112348e509b"), //posts._id
"comments.replies._id":ObjectId("5db6a88f7c6cfb0d0c2b689b"),//replies._id
},
{ "$push": { "comments.$[outer].replies.$[inner].likes": "10000012" } },
{
"arrayFilters": [
{ "outer._id": ObjectId("5db06e11d0987d0aa2cd5593") },//comments._id
{ "inner._id": ObjectId("5db6a88f7c6cfb0d0c2b689b") }//replies._id
]
}
)
但当我使用mongoose、express、collection编写代码时,不会进行更新
//Like Reply toggle
router.post("/toggleLikeReply", function(req, res, next) {
var id_post = req.body.id_post;
var id_comment = req.body.id_comment;
var id_reply = req.body.id_reply;
var id_user = req.user._id;
console.log("id_post: "+id_post+" id_comment: "+id_comment+" id_reply: "+id_reply+" id_user: "+id_user);
//todo
Post.aggregate([
{ $match: {_id: ObjectId(id_post),"comments._id": ObjectId(id_comment)}},
{ $unwind: "$comments"},
{ $match: { "comments._id": ObjectId(id_comment)}},
{ $project: {"replies": "$comments.replies", _id: 0}},
{ $match: { "replies._id": ObjectId(id_reply)}},
{ $project: {"likes": "$replies.likes", _id: 0}},
]).exec((err, users_liked) => {
var index = users_liked[0].likes[0].indexOf(id_user);
console.log(users_liked[0].likes[0]);
//todo
if (index == -1) {
const updatePost = async () => {
try {
await Post.updateOne({
_id: ObjectId(req.body.id_post),
"comments.replies._id": ObjectId(req.body.id_reply)},
{ $push: {"comments.$[outer].replies.$[inner].likes": ObjectId(req.user._id)} },
{
"arrayFilters": [
{ "outer._id": ObjectId(req.body.id_comment) },
{ "inner._id": ObjectId(req.body.id_reply) }
]
}
);
} catch (error) {
console.log("error", error);
}
};
updatePost().then(function(data) {res.send({ like: true, success: true})});
}else{
const updatePost = async () => {
try {
await Post.updateOne({
_id: ObjectId(req.body.id_post),
"comments.replies._id": ObjectId(req.body.id_reply)},
{ $pull: {"comments.$[outer].replies.$[inner].likes": ObjectId(req.user._id)} },
{
"arrayFilters": [
{ "outer._id": ObjectId(req.body.id_comment) },
{ "inner._id": ObjectId(req.body.id_reply) }
]
}
);
} catch (error) {
console.log("Try This Query
var mongoose = require('mongoose');
const Schema = mongoose.Schema
const ObjectId = Schema.Types.ObjectId
const updatePost = async () => {
try {
await Post.updateOne({
_id: ObjectId(req.body.id_post),
"comments.replies._id": ObjectId(req.body.id_reply)},
{ $push: {"comments.$[outer].replies.$[inner].likes": req.user._id} },
{
"arrayFilters": [
{ "outer._id": ObjectId(req.body.id_comment) },
{ "inner._id": ObjectId(req.body.id_reply) }
]
}
);
} catch (error) {
console.log("error", error);
}
};
updatePost().then(function(data) {res.send({ like: true, success: true})});
//类似回复切换
router.post(“/toggleLikeReply”),函数(req、res、next){
var id_post=req.body.id_post;
var id_comment=req.body.id_comment;
var id_reply=req.body.id_reply;
var id_user=req.user._id;
console.log(“id_post:+id_post+”id_comment:+id_comment+”id_reply:+id_reply+”id_user:+id_user”);
//待办事项
邮政集邮([
{$match:{{u id:ObjectId(id\u post),“comments.\u id:ObjectId(id\u comment)},
{$unwind:“$comments”},
{$match:{“comments.\u id”:ObjectId(id\u comment)},
{$project:{“回复”:“$comments.replies”,_id:0},
{$match:{“答复”.\u id:ObjectId(id\u reply)},
{$project:{“likes”:“$repress.likes”,_id:0},
]).exec((错误,用户喜欢)=>{
var index=users\u liked[0]。likes[0]。indexOf(id\u user);
log(用户喜欢[0]。喜欢[0]);
//待办事项
如果(索引==-1){
常量updatePost=async()=>{
试试{
等待Post.updateOne({
_id:ObjectId(请求主体id_post),
“comments.replays.\u id”:ObjectId(req.body.id\u replay)},
{$push:{“comments.$[outer].responses.$[inner].likes:ObjectId(req.user.\u id)},
{
“阵列过滤器”:[
{“outer.\u id”:ObjectId(req.body.id\u comment)},
{“inner.\u id”:ObjectId(req.body.id\u reply)}
]
}
);
}捕获(错误){
console.log(“错误”,error);
}
};
updatePost().then(函数(数据){res.send({like:true,success:true})});
}否则{
常量updatePost=async()=>{
试试{
等待Post.updateOne({
_id:ObjectId(请求主体id_post),
“comments.replays.\u id”:ObjectId(req.body.id\u replay)},
{$pull:{“comments.$[outer].responses.$[inner].likes:ObjectId(req.user.\u id)},
{
“阵列过滤器”:[
{“outer.\u id”:ObjectId(req.body.id\u comment)},
{“inner.\u id”:ObjectId(req.body.id\u reply)}
]
}
);
}捕获(错误){
console.log(“尝试此查询
请在id字段matchingmongoose.Schema.Types.ObjectId(req.body.id_reply)中使用ObjectId,我得到了这个变量mongoose=require('mongoose');const Schema=mongoose.Schema const ObjectId=Schema.Types.ObjectId,代码可以使用这个变量ObjectId=require('mongodb')).ObjectID;?首先,请告诉我代码是否正确运行?仍然不起作用,但我得到了{“like”:true,“success”:true}
,请检查所有_idvalue我更新了我的问题,我的问题满是路由,