Javascript 使用Mongoose.js将对象添加到文档中的对象数组

Javascript 使用Mongoose.js将对象添加到文档中的对象数组,javascript,arrays,node.js,mongodb,mongoose,Javascript,Arrays,Node.js,Mongodb,Mongoose,我已经查看了stackoverflow,但是我没有找到答案。我正在尝试将对象添加到本地mongodb中的新(空)数组中,该数组不是重复的。我还想用其他对象更新此数组 我已经研究了$push和$addToSet,示例中使用了一个的“id”(\u id),在添加第一个对象之前不会创建它 我正在使用Node.js、Mongoose.js、Mongodb、Express.js 我的模式是: var mongoose = require('mongoose'); var Schema = mongoose

我已经查看了stackoverflow,但是我没有找到答案。我正在尝试将对象添加到本地mongodb中的新(空)数组中,该数组不是重复的。我还想用其他对象更新此数组

我已经研究了$push和$addToSet,示例中使用了一个的“id”(\u id),在添加第一个对象之前不会创建它

我正在使用Node.js、Mongoose.js、Mongodb、Express.js

我的模式是:

var mongoose = require('mongoose');
var Schema = mongoose.Schema;
var barSchema = new Schema({
    location: [{
           name: String,
           city: String,
           total: Number
              }]     
           });
var Bar = mongoose.model('Bar', barSchema);
module.exports = Bar;
我试着用这个

       var newBar = bar({ 
           location: [{ "name": req.body.bar, "city": req.body.city, "total": 0 }] });
           newBar.save(function(err) {
              if (err) throw err;
        });
我也成功地使用了$push,但在这种情况下,我没有一个“id”

这也回馈了我们

     {
      "_id" : ObjectId("######"),
      "location" : [
       {
           "name" : "1st Bar",
           "city" : "Boston",
           "total" : 0,
           "_id" : ObjectId("#########")
        }
                ],
         "__v" : 0
      }
     {
      "_id" : ObjectId("######"),
      "location" : [
       {
           "name" : "2nd Bar",
           "city" : "Boston",
           "total" : 0,
           "_id" : ObjectId("#########")
        }
                ],
         "__v" : 0
      }
然而,我试图得到这个

      {
      "_id" : ObjectId("#######"),
      "location" : [
        {
           "name" : "Biddy Early's",
           "city" : "Boston",
           "total" : 0
        },
        {
           "name" : "Some Bar Name",
           "city" : "Boston",
           "total" : 0
        }
                  ]
      }

请知道可能有更好的方法,但是。。。在这种情况下,您要做的第一件事是创建模式或的新实例。基于你的代码看起来像什么,你可能想考虑这样的事情;
        var newBar = bar({
            "city": req.body.city,
            location: [{
                "bar": req.body.bar,
                "total": 0
            }]
        });
        newBar.save(function(err) {
            if (err) throw err;
        });
因为如果你在同一个城市寻找酒吧或餐馆,你可能希望有一个公共的键/值对“.find()”或“.update()”,这取决于你想用它做什么

从这里开始,您将希望通过“$addToSet”查看您之前提到的内容,这样您就不会向“location”数组添加重复的条。比如说,

        bar.findOneAndUpdate({'city':req.body.city}, 
              {'$addToSet': { location: { 
                                 'bar': req.body.bar, 'total': 0 } } },
                        function(err, b) {
                            if (err) throw err;
                                console.log(b);
                            });

考虑使用类似if/else的策略来确定城市名称是否存在,如果存在,则使用“$addToSet”。否则,如果它不存在,您将使用新模型,就像我使用的示例一样

如果不想在location对象中使用
\u id
,请在架构中添加
\u id:false
<代码>位置:[{name:String,city:String,total:Number,\u id:false}]谢谢塔鲁什,我不知道我能做到。然而,这并不是我所关注的。尽管我以后会记住这一点。我感谢你的帮助。
        bar.findOneAndUpdate({'city':req.body.city}, 
              {'$addToSet': { location: { 
                                 'bar': req.body.bar, 'total': 0 } } },
                        function(err, b) {
                            if (err) throw err;
                                console.log(b);
                            });