Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/.htaccess/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 为什么在使用mongoose将$push推送到文档中的数组时会得到重复的字符串?_Arrays_Node.js_Mongodb_Mongoose - Fatal编程技术网

Arrays 为什么在使用mongoose将$push推送到文档中的数组时会得到重复的字符串?

Arrays 为什么在使用mongoose将$push推送到文档中的数组时会得到重复的字符串?,arrays,node.js,mongodb,mongoose,Arrays,Node.js,Mongodb,Mongoose,当我尝试使用Poll.findOneAndUpdate()和$push更新一个数组的文档时,它似乎在推送相同字符串的2 我试着把我以前做的2次民意调查合并成一次,看看这是否是问题所在,但它仍然有两条线索 以前 var poll = await Poll.findOne({}); var choice = parseInt(message[1], 10); var cIndex = choice - 1; var cID = poll.choices[cIndex].id var currV =

当我尝试使用Poll.findOneAndUpdate()和$push更新一个数组的文档时,它似乎在推送相同字符串的2

我试着把我以前做的2次民意调查合并成一次,看看这是否是问题所在,但它仍然有两条线索

以前

var poll = await Poll.findOne({});
var choice = parseInt(message[1], 10);
var cIndex = choice - 1;
var cID = poll.choices[cIndex].id
var currV = poll.choices[cIndex].votes;
var i = currV + 1
var tUser = userstate.username

await Poll.findOneAndUpdate({ "_id": poll.id, "choices.id": cID },
        { $push: { voters: tUser } }, { useFindAndModify: false, new: true }, (err, doc) => {

        })

await Poll.findOneAndUpdate({ "_id": poll.id, "choices.id": cID },
        { $set: { "choices.$.votes": i } }, { useFindAndModify: false, new: true }, (err, doc) => {
          console.log(doc)
        })
之后

它们都会输出所需的结果:

{ active: true,
  choices:
   [ { id: 'RPSSbjCmIZ', text: 'Yes?', votes: 0 },
     { id: 'kxNHYi4oXV', text: 'No', votes: 0 } ],
  voters: [ 'opti_21' ],
  _id: 5d8bdcc4de15a567143075a9,
  polltext: 'Tea? Hmmm',
  __v: 0 }
但如果我查看文档,它会显示:

{ active: true,
  choices:
   [ { id: 'IGPMUREdSP', text: 'Yes?', votes: 0 },
     { id: 'NDdrKIHQpE', text: 'No', votes: 0 } ],
  voters: [ 'opti_21', 'opti_21' ],
  _id: 5d8bd52fa7ccb866578cb38e,
  polltext: 'Tea? Hmmm',
  __v: 0 }
为选票设置的美元对两方面都适用。我只希望它将一个字符串放入数组中,这样,如果该用户再次尝试投票,他们将无法投票

以下是整个应用程序上下文中的代码:

使用
$addToSet

$
addToSet
如果给定的字段中已经包含该项,则不要将其添加到该字段中,另一方面,$
push
将向字段中添加给定的对象,无论该对象是否存在

欲知详情

{ active: true,
  choices:
   [ { id: 'IGPMUREdSP', text: 'Yes?', votes: 0 },
     { id: 'NDdrKIHQpE', text: 'No', votes: 0 } ],
  voters: [ 'opti_21', 'opti_21' ],
  _id: 5d8bd52fa7ccb866578cb38e,
  polltext: 'Tea? Hmmm',
  __v: 0 }