Node.js Mongodb$集不工作
我正在尝试更新嵌套文档。查询正在返回正确的文档,但未更新属性 型号:Node.js Mongodb$集不工作,node.js,mongodb,mongoose,Node.js,Mongodb,Mongoose,我正在尝试更新嵌套文档。查询正在返回正确的文档,但未更新属性 型号: { _id: '560b072434b72aa4050fff9f', trips: [ { tripId: '561581ef9387780e76469e96', startDate: "2015-11-17T06:00:00.000Z", endDate: "2015-11-18T06:00:00.000Z" },{
{
_id: '560b072434b72aa4050fff9f',
trips: [
{
tripId: '561581ef9387780e76469e96',
startDate: "2015-11-17T06:00:00.000Z",
endDate: "2015-11-18T06:00:00.000Z"
},{
tripId: '5617d1bb1d42c4da90d3bdea',
startDate: "2015-10-17T06:00:00.000Z",
endDate: "2015-10-18T06:00:00.000Z"
}
],
}
查询:
UserData.update(
{ '_id': req.query._id, 'trips.tripId': req.query.tripId },
{ '$set': { 'trips.$.startDate' : req.query.newStartDate,
'trips.$.endDate' : req.query.newEndDate} },
{ 'multi': true },
function(e, doc){
console.log(doc);
}
);
模式:
var userDataSchema = {
name: String,
trips: Array
};
@BlakesSeven引导我找到了答案。我补充说:
var ObjectId=require('mongodb')。ObjectId代码>
在server.js中的my app.route之前,使用npm安装了mongodb,然后进行了更改
{'u id':req.query.\u id'trips.tripId':req.query.tripId},
到
{'u id':ObjectId(req.query.id),'trips.tripId':ObjectId(req.query.tripId)},
现在一切都应该更新了。谢谢Blakes Seven @Blakeseven引导我找到了答案。我补充说:
var ObjectId=require('mongodb')。ObjectId代码>
在server.js中的my app.route之前,使用npm安装了mongodb,然后进行了更改
{'u id':req.query.\u id'trips.tripId':req.query.tripId},
到
{'u id':ObjectId(req.query.id),'trips.tripId':ObjectId(req.query.tripId)},
现在一切都应该更新了。谢谢Blakes Seven 看看。为什么{'multi':true}
?既然您指定了\u id
,您不是只想更新一个文档吗?是的,我在另一篇SO文章中读到,您必须将“multi”设置为true。我尝试了$elemMatch并删除了multi-true,但它仍然没有更新。正如我所说的,正确的记录正在被提取,没有匹配ID的trip不会被返回——它根本不会更新记录。{ok:1,nModified:0,n:0}
。显示您定义的模式。注意,这里有一个数字的\u id
值,如果覆盖可能缺少的默认ObjectId
,mongoose需要特殊处理。请注意,结果确认没有匹配任何内容,因此输入有问题,架构定义可能是原因之一。@BlakesSeven这是我的错。我试图简化添加到这里的过程。我已将schema和_id字段更新为集合中的内容。此外,当我使用查询字符串时,它会找到一个匹配项:db.userData.find({u id:req.query.{u id'trips.tripId':req.query.tripId})
看看。为什么{multi':true}
?既然您指定了\u id
,您不是只想更新一个文档吗?是的,我在另一篇SO文章中读到,您必须将“multi”设置为true。我尝试了$elemMatch并删除了multi-true,但它仍然没有更新。正如我所说的,正确的记录正在被提取,没有匹配ID的trip不会被返回——它根本不会更新记录。{ok:1,nModified:0,n:0}
。显示您定义的模式。注意,这里有一个数字的\u id
值,如果覆盖可能缺少的默认ObjectId
,mongoose需要特殊处理。请注意,结果确认没有匹配任何内容,因此输入有问题,架构定义可能是原因之一。@BlakesSeven这是我的错。我试图简化添加到这里的过程。我已将schema和_id字段更新为集合中的内容。此外,当我使用查询字符串时,它会找到一个匹配项:db.userData.find({u-id':req.query.\u-id,'trips.tripId':req.query.tripId})