Javascript-Mongodb Collection的模型查找方法不适用于过滤条件

时间:2018-07-03 17:53:44

标签: javascript mongodb mongoose loopback

我正在使用Loopback框架和Mongodb开发一个项目。而且我正面临有关从应用程序层在Mongodb集合中查找文档的问题。它不适用于过滤条件。我总是将所有文档收集在收藏夹中。

这是我的模型架构

    {
  "name": "MyModel",
  "plural": "mymodel",
  "base": "PersistedModel",
  "idInjection": true,
  "options": {
    "validateUpsert": true
  },
  "properties": {
    "title": {
      "type": "string",
      "required": true
    },
    "description": {
      "type": "string",
      "required": true
    },
    "guide_to_make": {
      "type": "string",
      "required": true
    },
    "media": {
      "type": "object",
      "required": true
    },
    "price": {
      "type": "number",
      "required": true,
      "default": 0
    },
    "discount": {
      "type": "number",
      "default": 0
    },
    "status": {
      "type": "number",
      "required": true,
      "default": 1
    },
    "user_provider": {
      "type": "string",
      "required": true
    },
    "create_at": {
      "type": "date",
      "required": true,
      "defaultFn": "now"
    },
    "last_update": {
      "type": "date",
      "required": true,
      "defaultFn": "now"
    }
  },
  "validations": [],
  "relations": {},
  "acls": [
    {
      "accessType": "WRITE",
      "principalType": "ROLE",
      "principalId": "$unauthenticated",
      "permission": "DENY"
    }
  ],
  "methods": {}
}

这是我用来通过过滤器查询以查找与过滤器条件匹配的项目的某种方式:

MyModel.find({user_provide:'5ae9e8400e59ae0ecc5ed614'},(err,items)=>{console.log(JSON.stringify(items))});

MyModel.find({user_provide:{'like':'5ae9e8400e59ae0ecc5ed614'}},(err,items)=>{console.log(JSON.stringify(items))});

或者我尝试直接使用mongo连接,如下所示:

var MongoClient = require('mongodb').MongoClient;
    var url = "mongodb://localhost:27017/";

    MongoClient.connect(url, function (err, db) {
        if (err) throw err;
        var dbo = db.db("asiodb");
        dbo.collection("Mymodel").find({}, { user_provider: '5ae9e8400e59ae0ecc5ed614' }).toArray(function (err, result) {
            if (err) throw err;
            console.log(result);
            db.close();
        });
    });

但是使用所有方式,我始终将所有文档收集在Collection中。我已经使用mongo query命令在Robo3T中使用过滤条件进行了测试

db.getCollection('Mymodel').find({user_provider:'5ae9e8400e59ae0ecc5ed614'})

它与Robo3T中的mongo命令也可以一起使用。它可以找到符合条件的项目 我不知道为什么在使用JS代码的服务器层上它不起作用。

有人请向我展示JS代码中的错误或使用mongo find方法的正确语法。

非常感谢!

1 个答案:

答案 0 :(得分:1)

已更新

使用节点mongodb驱动程序,您应该在 find 函数的第一个参数中使用过滤器,而不要像在代码中那样在第二个参数中使用过滤器。

应该是这样的:

var MongoClient = require('mongodb').MongoClient;
var ObjectID = require('mongodb').ObjectID;
var url = "mongodb://localhost:27017/asiodb";

MongoClient.connect(url, function(err, db) {
    if (err) throw err;

    db.collection('Mymodel').find({ user_provider : '5ae9e8400e59ae0ecc5ed614' }, {}).toArray(function(err, result) {
        if (err) throw err;
        console.log(result);
        db.close();
    });
});