小编lfk*_*wtz的帖子

尝试使用Mongoose进行批量upsert.最干净的方法是什么?

我有一个包含三个字段的文档的集合:first_name,last_name和age.我试图找出Mongoose中我可以使用什么查询进行批量upsert.我的应用程序偶尔会收到具有相同三个字段的新对象数组.我希望查询检查文档中是否已存在第一个和最后一个名称,如果它们存在,则更新年龄(如果它不同).否则,如果名字和姓氏不存在,请插入新文档.

目前,我只是在进行导入 - 还没有为这个upsert片段构建逻辑.

app.post('/users/import', function(req, res) {
  let data = req.body;
  let dataArray = [];
  data.forEach(datum => {
    dataArray.push({
        first: datum.first,
        last: datum.last,
        age: datum.age
    })
})

User.insertMany(dataArray, answer => {
    console.log(`Data Inserted:`,answer)
})
Run Code Online (Sandbox Code Playgroud)

`

我的用户模型如下所示:

const mongoose = require('mongoose');

const Schema = mongoose.Schema;

const userSchema = new Schema({
  first: String,
  last: String,
  age: Number,
  created_at: { type: Date, default: Date.now }
});

var User = mongoose.model('User', userSchema);
module.exports = User;
Run Code Online (Sandbox Code Playgroud)

mongoose mongodb node.js

15
推荐指数
4
解决办法
8515
查看次数

如何在允许单指绘图的同时允许两指滚动 HTML 画布元素?

我正在尝试使用固定大小的画布制作画布绘图应用程序 - 但能够在画布周围滚动以在基于用户屏幕尺寸可能不可见的不同点上进行绘制。

它可以像我希望的那样在桌面上滚动,但我正在尝试在移动设备上实现两指滚动。

http://jsbin.com/qugabuh/edit

在我的触控绘图功能中,我尝试了以下操作:

const startTouch = function(e) {
  if (e.targetTouches.length < 2) {
    ctx.beginPath();
    x = e.changedTouches[0].pageX + content.scrollLeft;
    y = e.changedTouches[0].pageY - 34 + content.scrollTop;
    ctx.moveTo(x, y);
  }
};

const moveTouch = function(e) {
  if (e.targetTouches.length < 2) {
    e.preventDefault();
    x = e.changedTouches[0].pageX + content.scrollLeft;
    y = e.changedTouches[0].pageY - 34 + content.scrollTop;
    ctx.lineTo(x, y);
    ctx.stroke();
  }
};
Run Code Online (Sandbox Code Playgroud)

这在我的 Android 平板电脑上似乎可以正常工作(尽管有时如果我不完全同时抬起两个手指会画线),但在我的 iPhone 上则完全不行。

javascript canvas touch html5-canvas

6
推荐指数
1
解决办法
625
查看次数

for循环可以等到其中的函数完成执行吗?

我正在构建一个Simon游戏,并为每个新一轮构建了一个函数,如下所示:

var game = [];
var squares = ["green", "red", "blue", "yellow"];

var newRound = function() {
  // adds a new round to the end of the game array
  game.push(squares[Math.floor(Math.random() * squares.length)]);

  // for loop to run through the game array
  for (var x = 0; x < game.length; x++) {
    playButton(game[x]);
  }
}
Run Code Online (Sandbox Code Playgroud)

然后,我构建了另一个函数,它控制动画和声音每次广场被用户击中,或循环通过我的for循环

var playButton = function(color){
  $("#"+color).addClass(color+"--active active", 300, function(){
     $("#audio-"+color).trigger('play');
     $("#"+color).removeClass(color+"--active active", 300)
});
Run Code Online (Sandbox Code Playgroud)

现在,我的for-loop只需一次循环播放所有动画和声音.如何让for循环等待playButton函数在再次循环之前完成执行?

CodePen上的代码示例

javascript jquery for-loop function

1
推荐指数
1
解决办法
1711
查看次数