Javascript 的 find() 函数不适用于数组嵌入文档
Javascript's find() function not working for array embedded documents
我正在尝试为博文构建一个 upvote/downvote 功能,无论用户之前是否点击过按钮都是必需的。但是 javascript find() 函数不起作用。有没有办法从数组中获取匹配的嵌入文档?
index.js
io.on( 'connection', function( socket ) {
console.log( 'a user has connected!' );
socket.on( 'disconnect', function() {
console.log( 'user disconnected' );
});
socket.on( 'upvote-event', async function( upvote_flag , id) {
console.log(typeof id); //getting the post id from button click
console.log(user.upvotes_downvotes); //upvote downvote array
const post_Id = new ObjectID(id);
const PreClicked = user.upvotes_downvotes.find(clicked => {
console.log(clicked.postId,post_Id)
return clicked.postId === post_Id; // where it is failing
});
var ok = false;
console.log(PreClicked, post_Id); //PreClicked is always undefined :(
if(PreClicked === undefined)
{
upvote_count = 1;
const newUpvote = { postId: post_Id, types: "upvote" };
// console.log(user._id);
await User.findOneAndUpdate({_id: user._id},
{ $push:
{
upvotes_downvotes: newUpvote
},
},
)
}else if(PreClicked.types==="upvote"){ //Never goes here even if the upvoted posts exists in array
upvote_count = -1;
await User.findOneAndUpdate({_id: user._id},
{ $pull:
{ upvotes_downvotes:{
$elemMatch:{
postId: post_Id, types: "upvote"
}
}
}
})
}
});
schema.js
const Mongoose = require('mongoose');
const Schema = Mongoose.Schema;
const passportLocalMongoose = require('passport-local-mongoose');
User = new Schema({
email : {
type : String,
required : true,
unique : true
},
upvotes_downvotes:[{
postId:{ type: Schema.Types.ObjectId , ref:'Post'},
types: String
}],
});
module.exports = Mongoose.model('User',User);
找到解决方案“=== is not applicable for documents and worked for .equals
我正在尝试为博文构建一个 upvote/downvote 功能,无论用户之前是否点击过按钮都是必需的。但是 javascript find() 函数不起作用。有没有办法从数组中获取匹配的嵌入文档?
index.js
io.on( 'connection', function( socket ) {
console.log( 'a user has connected!' );
socket.on( 'disconnect', function() {
console.log( 'user disconnected' );
});
socket.on( 'upvote-event', async function( upvote_flag , id) {
console.log(typeof id); //getting the post id from button click
console.log(user.upvotes_downvotes); //upvote downvote array
const post_Id = new ObjectID(id);
const PreClicked = user.upvotes_downvotes.find(clicked => {
console.log(clicked.postId,post_Id)
return clicked.postId === post_Id; // where it is failing
});
var ok = false;
console.log(PreClicked, post_Id); //PreClicked is always undefined :(
if(PreClicked === undefined)
{
upvote_count = 1;
const newUpvote = { postId: post_Id, types: "upvote" };
// console.log(user._id);
await User.findOneAndUpdate({_id: user._id},
{ $push:
{
upvotes_downvotes: newUpvote
},
},
)
}else if(PreClicked.types==="upvote"){ //Never goes here even if the upvoted posts exists in array
upvote_count = -1;
await User.findOneAndUpdate({_id: user._id},
{ $pull:
{ upvotes_downvotes:{
$elemMatch:{
postId: post_Id, types: "upvote"
}
}
}
})
}
});
schema.js
const Mongoose = require('mongoose');
const Schema = Mongoose.Schema;
const passportLocalMongoose = require('passport-local-mongoose');
User = new Schema({
email : {
type : String,
required : true,
unique : true
},
upvotes_downvotes:[{
postId:{ type: Schema.Types.ObjectId , ref:'Post'},
types: String
}],
});
module.exports = Mongoose.model('User',User);
找到解决方案“=== is not applicable for documents and worked for .equals