Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/11.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/meteor/3.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
Mongodb Meteor upsert-使用addToSet和每个_Mongodb_Meteor - Fatal编程技术网

Mongodb Meteor upsert-使用addToSet和每个

Mongodb Meteor upsert-使用addToSet和每个,mongodb,meteor,Mongodb,Meteor,我有一个包含eventId和来宾ID数组的Groups集合。我正在尝试使用upsert检查eventId和当前来宾id是否已经存在,如果已经存在,则使用推送到来宾数组的新来宾id更新集合,否则使用当前来宾和新来宾插入新集合。这是我的上传代码: var groupId = Groups.upsert({ $and:[ {eventId:groupAttributes.eventId}, // find all the Groups assoc

我有一个包含eventId和来宾ID数组的Groups集合。我正在尝试使用upsert检查eventId和当前来宾id是否已经存在,如果已经存在,则使用推送到来宾数组的新来宾id更新集合,否则使用当前来宾和新来宾插入新集合。这是我的上传代码:

        var groupId = Groups.upsert({
          $and:[
          {eventId:groupAttributes.eventId}, // find all the Groups associated w/ this event
          { "guests": {$in: [guest]}}, // and include this guest
          ]
        },{$set: group, 
          $addToSet: {guests: {$each: [ guest, groupAttributes.guest ]}  }
        });
实际上,每次都会创建一个新组,这是因为$each修饰符不允许$addToSet向数组中添加多个值,如下所述

取而代之的是,来宾数组添加了一个大小为2的“$each”数组

[{"$each":["yQZfEXfs7J9E4Nbqf","s2rk5KAxq4dYtDFNG"]}]
两个问题。1) 有没有更好的方法来做我想做的事情,如果没有,我做错了什么?谢谢

编辑:在meteor mongo中尝试以下代码

db.groups.update({
          $and:[
          {eventId:"wGMhaP7t4nsiTNHt5"},
          { "guests": {$in: ["yQZfEXfs7J9E4Nbqf"]}},
          ]
        },{$set: { userId: 'gBuR448nsJMcpwjsT',
  author: 'Martin W',
  weddingId: 'rz9xjtDm3bFAeiCxM',  
  eventId: 'wGMhaP7t4nsiTNHt5' }, 
          $addToSet: {guests: {$each: [ "yQZfEXfs7J9E4Nbqf","s2rk5KAxq4dYtDFNG" ]}  }
        }, {upsert: true})
结果如下

{ "_id" : ObjectId("528fa31a098141f336688d96"), "author" : "Martin W", "eventId"
 : "wGMhaP7t4nsiTNHt5", "guests" : [  "yQZfEXfs7J9E4Nbqf",  "s2rk5KAxq4dYtDFNG"
], "userId" : "gBuR448nsJMcpwjsT", "weddingId" : "rz9xjtDm3bFAeiCxM" }
现在我在Meteor中尝试相同的代码

var groupId = Groups.update({
          $and:[
          {eventId:"wGMhaP7t4nsiTNHt5"},
          { "guests": {$in: ["yQZfEXfs7J9E4Nbqf"]}},
          ]
        },{$set: { userId: 'gBuR448nsJMcpwjsT',
  author: 'Martin W',
  weddingId: 'rz9xjtDm3bFAeiCxM',  
  eventId: 'wGMhaP7t4nsiTNHt5' }, 
          $addToSet: {guests: {$each: [ "yQZfEXfs7J9E4Nbqf","s2rk5KAxq4dYtDFNG" ]}  }
        }, {upsert: true})
结果是不同的(也是不可取的)


我是一个mongo新手,所以不确定该怎么做,但我注意到_id在第一个结果中是ObjectId,而不是在第二个结果中。来宾数组是我希望使用meteor mongo的方式,但是在第二个结果集中使用$each作为值。有什么想法吗?

如果每次都插入一个新文档,那么您可能需要查看选择器。Upsert查找匹配的文档(由第一个参数定义),如果它们存在,它将修改它们,否则它将插入一个新文档。您是否验证了
groupAttributes.eventId
与现有文档匹配?你能到Mongo控制台运行选择器,看看它是否返回匹配结果吗?@BruceHubbard谢谢你的回答。我根据你的评论更新了我的答案。我确实验证了groupAttributes.eventId是否与现有文档匹配。所以这次,我在meteor mongo和meteor方法中使用了完全相同的mongo更新。你会注意到结果是不同的。有什么想法吗?看来这就是问题所在!看起来你必须手动完成,直到bug修复程序发布。是的。谢谢你的帮助。
{ "_id" : "4XgaF6pBGEohQR6pa", "userId" : "gBuR448nsJMcpwjsT", "author" : "Marti
n W", "weddingId" : "rz9xjtDm3bFAeiCxM", "eventId" : "wGMhaP7t4nsiTNHt5", "guest
s" : [  {  "$each" : [  "yQZfEXfs7J9E4Nbqf",  "s2rk5KAxq4dYtDFNG" ] } ] }