mongodb "$"的作用

{
    "_id": ObjectId("58e48e32830f398e8f401a95"),
    "_class": "com.ydd.model.mongdb.WeiXinQuestion",
    "openid": "oDVO_w2juwMejm7S-UxfLaSOC0kU21",
    "createtime": NumberLong(1491373618008),
    "endtime": NumberLong(0),
    "antotal": NumberLong(2),
    "content": "asdfasdfasdfasdfasdf",
    "status": 0,
    "isshow": 1,
    "address": "",
    "sex": 0,
    "labels": "气血两虚",
    "besttotal": 0,
    "bestscore": 0,
    "clerkAnswer": [
        {
            "_id": "p0k94bZ4EHV9XsftlMlOzHS8L",
            "clerkId": 2159,
            "headerimg": "head/2159/201612/1480922352820.jpeg",
            "name": "药点点店长7",
            "content": "高难度",
            "createtime": NumberLong(1491373686025),
            "adopt": 0,
            "score": 0,
            "zan": 0,
            "ids": [
                
            ],
            "clerkAnswerScore": [
                
            ],
            "qid": "58e48e32830f398e8f401a95",
            "status": 0,
            "isReward": 0,
            "replayAnswers": [
                
            ]
        },
        {
            "_id": "GkJtDMB7uizt699qFyEhAINZ0",
            "clerkId": 2166,
            "headerimg": "head/2166/201701/1484742330434.jpeg",
            "name": "药点店员13",
            "content": "但",
            "createtime": NumberLong(1491373800122),
            "adopt": 0,
            "score": 0,
            "zan": 0,
            "ids": [
                
            ],
            "clerkAnswerScore": [
                
            ],
            "qid": "58e48e32830f398e8f401a95",
            "status": 0,
            "isReward": 0,
            "replayAnswers": [
                
            ]
        },
        {
            "_id": ObjectId("58b5b0eead349879b2871348"),
            "answerId": "L7izf6lVoyY9QyERd0m2",
            "clerkId": 4625,
            "headerimg": "/resource/2016/8/26/c160c426-a.jpeg",
            "name": "林建丽",
            "content": "合生元益生菌",
            "createtime": NumberLong(1488302318220),
            "adopt": 0,
            "score": 0,
            "zan": 0,
            "ids": [
                
            ],
            "clerkAnswerScore": [
                
            ],
            "qid": "58e48e32830f398e8f401a95",
            "status": 0,
            "isReward": 0,
            "replayAnswers": [
                
            ]
        }
    ]
}

当要只查询clerkAnswer这个数组中的某条数据时可以这样查find({"clerkAnswer._id":"GkJtDMB7uizt699qFyEhAINZ0"},{"clerkAnswer.$":{$slice:1}}) ,如果你在<查询条件>中查询的内容是array里的内容,用$就能引用前查询中匹配到的元素。所以不需要遍历就能直接取到数组中的某一个对象。如果把clerkAnswer.$改为clerkAnswer,查询到的就是三条记录中的第一条了,而不是前边指定的那条,当然如果你前边的查询条件没有具体包含到数组里的数据比如你是这样查的 find({"_id":ObjectId("58e48e32830f398e8f401a95")},{"clerkAnswer.$":{$slice:1}})这样就查不到clerkAnswer中指定的某条了


原文地址:https://www.cnblogs.com/akaneblog/p/6888508.html