在mongodb shell和node.js中的相同查询的行为是不同的
为什么发生这种情况? 这种差异是否有合理的解释?
例如,我有一个数据库结构为;
{ id: "1" category: { name: "name1" groups: [ { groupName : "groupName1" title: "" }, { groupName : "groupName2" title: "" } ] } }
查询如下;
db.collection.aggregate({$unwind:"$category.groups"}, {$match:{"category.groups.groupName": "groupName2", "category.name" : "name1"}})
在mongo shell中它返回为;
{ id: "1" category: { name: "name1" groups: [ groupName : "groupName2" title: "" ] } }
在node.js中查询;
db.collection.aggregate({$unwind:"$category.groups"}, {$match:{"category.groups.groupName": "groupName2", "category.name" : "name1"}}). toArray(function(err, result) { if (result) { debugger; var res = result; } }); };
在node.js中的结果是这样的;
{ id: "1" category: { name: "name1" groups: [ { groupName : "groupName1" title: "" }, { groupName : "groupName2" title: "" } ] } }
使用node.js驱动程序,您需要将aggregate
pipe道作为数组传递,而不是单独的参数。
所以它应该是:
db.collection.aggregate([{$unwind: "$category.groups"}, {$match: {"category.groups.groupName": "groupName2", "category.name": "name1"}} ]).toArray(function(err, result) { ... });
shell版本更加宽容,但是为了安全起见,您应该始终使用数组,否则就不能包含options
参数。
- 当modelObject从数据库本身获得时,modelObject.save()是否只更新现有的数据库文档?
- 保存/devise嵌套forms,根据mongoose模式,通过mongoose在mongodb中保存/更新数据
- 带有node.js和MongoDB的警报系统
- 如何将字段名称传递到Mongoose的update()方法?
- 使用Node.js通过其独特的_id更新多个MongoDB对象
- 节点大数据处理
- 在Node.js中读取/写入二进制数据到MongoDB
- 护照mongoose对象#<架构>没有方法“身份validation”,但我可以看到的方法
- 如何使用Mongoose.js 3.8.20和MongoDB 2.6.5对文档进行sorting?