我写了一个服务,使用update语句将新数据推送到我的集合中,我需要检索最后插入数据的id。我正在使用db.collection.update
,但它只是给出了这样的响应:
{
"result": {
"ok": 1,
"nModified": 1,
"n": 1
}
}
我的api就是:
app.post('/feeds',function(req,res) {
var _id = req.body._id;
var title = req.body.title;
var description = req.body.description;
var latitude = Number(req.body.latitude);
var longitude = Number(req.body.longitude);
db.user.update(
{_id:_id },
{$push : {
feed:{
title: title,
description:description,
latitude:latitude,
longitude:longitude
}
}
},function (err,result) {
if (err) {
res.json({"success": '0', "message": "Error adding data"});
}
else {
res.json({'result':result});
}
});
});
这是我的Mongoose架构:
var user = new mongoose.Schema({
username : {type: String},
email : {type: String,index: {unique: true}},
password : {type: String},
feed : [{
title : {type: String},
description : {type: String},
latitude : {type:Number},
longitude : {type:Number},
feedImages : [{
imageUrl: {type: String}
}],
}]
});
我想将数据添加到Feed中。
我的数据库结构
我想要新推送的内容。
答案 0 :(得分:4)
如果您想为每个Feed使用一个文档并将子文档推入(嵌入方式),则可以为新创建的Feed _id
预先分配sub-document
:
var feedId = new ObjectId();
db.user.update({
_id: _id
}, {
$push: {
feed: {
_id: feedId,
title: title,
description: description,
latitude: latitude,
longitude: longitude
}
}
}, function(err, result) {
/* ...your code... */
});
如果您想查询此字段,请不要为user.feed._id
添加索引(根据您的mongodb版本使用ensureIndex
或createIndex
)
作为替代方式,您可以使用单独的Feed集合,并使用包含insert
外键的userId
语句。
您可以使用Multiple Collections vs Embedded Documents here找到有关pro / cons的更多信息。
答案 1 :(得分:0)
你应该使用X year month sum
10 2016 1 450
10 2016 2 670
... ... ... ...
10 2017 1 200
11 2016 1 460
,为什么你需要id,当你已经从req机构获得它时?
db.user.insert()
答案 2 :(得分:0)
这是findOneAndUpdate的好例子。
查找匹配的文档,根据更新arg更新它,传递任何选项,并将找到的文档(如果有)返回给回调。如果传回回调,则立即执行查询。
可用选项
new :bool - 如果为true,则返回修改后的文档而不是原始文档。默认为false(在4.0中更改)