【发布时间】:2021-02-27 11:34:34
【问题描述】:
所以我在过去的 2 天里一直在做这件事,我快疯了,这是我的代码(其中的一部分):
const mongoose = require('mongoose')
mongoose.connect('',{
useNewUrlParser: true,
useUnifiedTopology: true,
useFindAndModify: false
})
const postsSchema = new mongoose.Schema({
_id: String,
posts: Array,
upvotes: Number,
downvotes: Number,
fans: Array,
dmUserWhenUpvoted: Boolean,
dmUserWhenDownVoted: Boolean
})
const postsModel = mongoose.model("Posts",postsSchema)
/**
*
* @param {Object} user
*/
async function getPosts(user){
if(!user) user = message.author
let posts = await postsModel.findOne({_id: user.id})
if(posts === null){
let newData = new postsModel({
_id: user.id,
posts: [],
upvotes: 0,
downvotes: 0,
fans: [],
dmUserWhenUpvoted: false,
dmUserWhenDownVoted: false
})
await newData.save()
posts = await postsModel.findOne({_id: user.id})
}
return {
_id: user.id,
posts: posts.posts,
upvotes: posts.upvotes,
downvotes: posts.downvotes,
fans: posts.fans,
dmUserWhenUpvoted: posts.dmUserWhenUpvoted,
dmUserWhenDownVoted: posts.dmUserWhenDownVoted,
account: posts
}
}
这是我用来推送的两种方法:
let getposts = await getPosts()
postsModel.updateOne(
{_id: message.author.id},
{
"$push": {
"posts": {
id: s.id,
upvotes: 0,
downvotes: 0
},
}
},
function(err, response) {
console.log(err)
console.log(response)
}
)
console.log(getposts.account)
await message.delete()
当我将posts.account和错误日志记录为null时,此方法不会推送任何内容
方法二:
let getposts = await getPosts()
getposts.account.posts.push({
id: s.id,
upvotes: 0,
downvotes: 0
})
await getposts.account.save(function(err){
console.log(err)
});
console.log(getposts.account)
await message.delete()
当我记录 getposts.account 时,它会记录包含推送对象的数组(帖子),但是当我进入仪表板并查看我的集合时,它是空的。希望有人能帮我解决我的问题,这个问题only出现在这部分代码上,我使用方法2将我所有的东西推送到不同的集合中,它可以工作
【问题讨论】:
-
你能准确地显示你的
posts路径是一个数组吗?那么你能不能更具体一点:posts: Array。 mongoose 非常注重根据您在模式中的具体内容,您可以将什么推入数组中。它可能只是忽略了 save() 上推送的文档,因为它们不符合预期。 -
codemonkey,对不起,我不知道你的意思。我将帖子指定为数组,你是说我应该做
posts: []? -
这里是 mongoose 中的典型模式路径:
posts: [String],它告诉 mongoose 您将在该字段中放入一个字符串数组。看起来您正在将一组对象推入其中,因此您的架构实际上应该如下所示:posts: [new mongoose.Schema({})],它将告诉 mongoose 它将是一个任意对象的数组。 -
我试试吧
-
好吧,所以我尝试了这个:
js const postsSchema = new mongoose.Schema({ _id: String, posts: [new mongoose.Schema({})], upvotes: Number, downvotes: Number, fans: Array, dmUserWhenUpvoted: Boolean, dmUserWhenDownVoted: Boolean }) const postsModel = mongoose.model("Posts",postsSchema)但现在它也没有推送对象,它只是在里面添加了一些随机的东西:{粉丝:[],_id:'715956009327263858',帖子:[ { _id: 60399ccd4b2d2833e46cdc88 } ], upvotes: 0, downvotes: 0, dmUserWhenUpvoted: false, dmUserWhenDownVoted: false, __v: 21 }