mongodb - Mongoose 的 $or 条件的 find 方法无法正常工作

最近我开始在 Nodejs 上使用 MongoDB 和 Mongoose。

当我使用带有 $or 条件和 _id 字段的 Model.find 方法时,Mongoose 无法正常工作。

这不起作用:

User.find({
  $or: [
    { '_id': param },
    { 'name': param },
    { 'nickname': param }
  ]
}, function(err, docs) {
   if(!err) res.send(docs);
});

顺便说一句,如果我删除 '_id' 部分,这确实有效!

User.find({
  $or: [
    { 'name': param },
    { 'nickname': param }
  ]
}, function(err, docs) {
   if(!err) res.send(docs);
});

在 MongoDB shell 中,两者都可以正常工作。

最佳答案

我通过谷歌搜索解决了:

var ObjectId = require('mongoose').Types.ObjectId;
var objId = new ObjectId( (param.length < 12) ? "123456789012" : param );
// You should make string 'param' as ObjectId type. To avoid exception, 
// the 'param' must consist of more than 12 characters.

User.find( { $or:[ {'_id':objId}, {'name':param}, {'nickname':param} ]}, 
  function(err,docs){
    if(!err) res.send(docs);
});

https://stackoverflow.com/questions/7382207/

相关文章:

MongoDB GPG - 无效签名

mongodb - 在 MongoDB 中查找重复记录

mongodb - 未指定排序顺序时,MongoDB 如何对记录进行排序?

mongodb - GridFS 对于生产来说是否足够快速和可靠?

javascript - Mongoose .js : Find user by username

ruby - Mongoid 还是 MongoMapper?

node.js - 如何获得 Mongoose 模型的所有计数?

mongodb - 为什么 Mongoose 既有模式又有模型?

mongodb - 值不为空的 Mongoose 查询

mongodb - 如何在 MongoDB 中将集合导出到 CSV?