Javascript - метод поиска модели для Mongodb Collection не работает с условиями фильтра - PullRequest
0 голосов
/ 03 июля 2018

Я занимаюсь разработкой проекта с использованием Loopback Framework и 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))});

Или я попытался напрямую использовать монго соединение, как показано ниже:

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();
        });
    });

Но со всеми способами, которые я использовал, я всегда получал все документы в Коллекции. И я протестировал условия фильтра в Robo3T с помощью команды запроса mongo

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

И это работает также с командой mongo в Robo3T. Он может найти предметы, которые соответствуют условиям Я не знаю, почему это не работает на моем уровне сервера с кодом JS.

Кто-то, пожалуйста, покажите мне, что не так в коде JS или в правильном синтаксисе для использования метода поиска Монго.

Большое спасибо!

1 Ответ

0 голосов
/ 03 июля 2018

ОБНОВЛЕНИЕ:

Используя драйвер узла 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();
    });
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...