用于查询子实体的节点宁静的GET查询string

使用Node + Express + Mongoose + node-restful

https://github.com/baugarten/node-restful

我面临的问题是过滤子实体数据。

模型模式的定义如下:节点宁静

//Schema var postSchema = new mongoose.Schema({ title: { type: 'String', required: true }, content: { type: 'String', required: true }, tags: [{ name : {type: 'String'} }] }); 

当我执行获取请求这是我得到哪些是正确的,因为我只有两个logging。

HTTP://本地主机:3000 / API /后

 [ { "_id": "5529866ae1ad43bd95d6b335", "title": "amazon My Post", "content": "dasdd This is a post with some tags", "tags": [ { "name": "amazon" }, { "name": "tracking" } ] }, { "_id": "55298674e1ad43bd95d6b336", "title": "flipkart My Post", "content": "dasdjkjfkajd This is a post with some tags", "tags": [ { "name": "flipkart" }, { "name": "tracking" } ] } ] 

我想要执行像这样的http:// localhost:3000 / api / post /?tags.name = amazon

它应该返回我只有一个logging,其中tag.name为“亚马逊”

这工作得很好,如果我在mongodb上启动db.getCollection('posts')。find({“tags.name”:“amazon”}),我如何得到这个与node-restful

 [ { "_id": "5529866ae1ad43bd95d6b335", "title": "amazon My Post", "content": "dasdd This is a post with some tags", "tags": [ { "name": "amazon" }, { "name": "tracking" } ] } ] 

而是把所有的结果都归还给我。

我哪里错了。

有没有更好的方法来存储标签在mongo数据库

我的代码如下

server.js

 // Dependencies var express = require('express'); var mongoose = require('mongoose'); var bodyParser = require('body-parser'); // MongoDB mongoose.connect('mongodb://localhost/NodeMongo'); // Express var app = express(); app.use(bodyParser.urlencoded({extended: true})); app.use(bodyParser.json()); //Enable CORS app.all('*', function(req, res, next) { res.header('Access-Control-Allow-Origin', '*'); res.header('Access-Control-Allow-Methods', 'PUT, GET, POST, DELETE, OPTIONS'); res.header('Access-Control-Allow-Headers', 'Content-Type'); next(); }); app.use('/api',require('./routes/api')); // Start Server app.listen(3000); console.log('Api is running on port 3000'); 

api.js

 // Dependencies var express = require('express'); var router = express.Router(); Post.methods(['get', 'post', 'put', 'delete']); Post.register(router, '/post'); module.exports = router; 

post.js

 // Dependencies var restful = require('node-restful'); var mongoose = restful.mongoose; //Schema var postSchema = new mongoose.Schema({ title: { type: 'String', required: true }, content: { type: 'String', required: true }, tags: [{ name : {type: 'String'} }] }); //Return model module.exports = restful.model('Posts', postSchema); 

我认为你代表标签的方式很好,但是如果你只在标签上有一个属性,为什么不只是一串string呢?

看看github,我看到node-restful使用类似符号的django进行过滤。 你试过了吗?

 ?tags.name__eq=amazon 

要么

 ?tags%20name__eq=amazon 

如果不起作用,那么库可能不支持将嵌套属性作为关键path。

你可能很容易自己添加function。

如果使用string数组来表示模型中的标签,它可能也会按原样工作。

不过迟早,如果图书馆有这个限制,你会再次遇到这种情况,将无法通过改变你的模型来解决它。