在Mongo数组内搜索

时间:2017-09-08 17:19:45

标签: javascript mongodb meteor

这是我的mongo结构:

{
  "_id": "QEvgJKERy5xGNLv7J",
  "title": "test 2",
  "owner": "HQNGYZvrrdQRwLNvT",
  "markdown": "sdfasdfdasf adsfadsfasdf",
  "state": "Draft",
  "category": [
    "Bios & Memoirs",
    "Classics"
  ],
  "type": "Article",
  "lastupdate": "",
  "slug": "test-2",
  "date": 1504890635515,
  "views": "0",
  "rating": "0",
  "username": "gibigbig"
}

我想根据类别查找所有文章。如下所示:

db.documents.find({category: 'Comedy'});

但它不起作用。非常感谢任何帮助。

2 个答案:

答案 0 :(得分:2)

由于category是一个数组,您也可以使用$in:

db.documents.find({ category: { $in: ['Comedy'] }});

因为你在数组中寻找值Comedy,所以它似乎是向后的,但这就是定义语法的方式。您还可以执行多对多匹配,即

db.documents.find({ category: { $in: ['Comedy','Tragedy'] }});

或者您可以在发现时直接进行单值搜索:

db.documents.find({category: 'Comedy'});

答案 1 :(得分:0)

/* * Carrot2 project. * * Copyright (C) 2002-2010, Dawid Weiss, Stanisław Osiński. * All rights reserved. * * Refer to the full license file "carrot2.LICENSE" * in the root folder of the repository checkout or at: * http://www.carrot2.org/carrot2.LICENSE */ package org.carrot2.webapp; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.OutputStreamWriter; import java.io.PrintWriter; import javax.servlet.Filter; import javax.servlet.FilterChain; import javax.servlet.FilterConfig; import javax.servlet.ServletException; import javax.servlet.ServletOutputStream; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponseWrapper; /** * Buffer the output from filters below and set accurate <code>Content-Length</code> * header. This header is required by flash, among others, to display progress * information. */ public class ContentLengthFilter implements Filter { private final static class BufferingOutputStream extends ServletOutputStream { private final ByteArrayOutputStream baos = new ByteArrayOutputStream(); @Override public void write(int b) throws IOException { baos.write(b); } @Override public void write(byte [] b) throws IOException { baos.write(b); } @Override public void write(byte [] b, int off, int len) throws IOException { baos.write(b, off, len); } } private final static class BufferingHttpServletResponse extends HttpServletResponseWrapper { private enum StreamType { OUTPUT_STREAM, WRITER } private final HttpServletResponse httpResponse; private StreamType acquired; private PrintWriter writer; private ServletOutputStream outputStream; private boolean buffering; public BufferingHttpServletResponse(HttpServletResponse response) { super(response); httpResponse = response; } @Override public ServletOutputStream getOutputStream() throws IOException { if (acquired == StreamType.WRITER) throw new IllegalStateException("Character stream already acquired."); if (outputStream != null) return outputStream; if (hasContentLength()) { outputStream = super.getOutputStream(); } else { outputStream = new BufferingOutputStream(); buffering = true; } acquired = StreamType.OUTPUT_STREAM; return outputStream; } @Override public PrintWriter getWriter() throws IOException { if (acquired == StreamType.OUTPUT_STREAM) throw new IllegalStateException("Binary stream already acquired."); if (writer != null) return writer; if (hasContentLength()) { writer = super.getWriter(); } else { writer = new PrintWriter(new OutputStreamWriter( getOutputStream(), getCharacterEncoding()), false); } acquired = StreamType.WRITER; return writer; } /** * Returns <code>true</code> if the user set <code>Content-Length</code> * explicitly. */ private boolean hasContentLength() { return super.containsHeader("Content-Length"); } /** * Push out the buffered data. */ public void pushBuffer() throws IOException { if (!buffering) throw new IllegalStateException("Not buffering."); BufferingOutputStream bufferedStream = (BufferingOutputStream) outputStream; byte [] buffer = bufferedStream.baos.toByteArray(); httpResponse.setContentLength(buffer.length); httpResponse.getOutputStream().write(buffer); } } public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws IOException, ServletException { final HttpServletResponse response = (HttpServletResponse) resp; final BufferingHttpServletResponse wrapped = new BufferingHttpServletResponse(response); chain.doFilter(req, wrapped); if (wrapped.buffering) { wrapped.pushBuffer(); } } public void destroy() { // Empty } public void init(FilterConfig config) throws ServletException { // Empty } } 我的环境没了。修复了这些查询现在可以正常工作。