Javascript 使用Mongoose.js将对象添加到文档中的对象数组
我已经查看了stackoverflow,但是我没有找到答案。我正在尝试将对象添加到本地mongodb中的新(空)数组中,该数组不是重复的。我还想用其他对象更新此数组 我已经研究了$push和$addToSet,示例中使用了一个的“id”(\u id),在添加第一个对象之前不会创建它 我正在使用Node.js、Mongoose.js、Mongodb、Express.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
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);
});